mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-06-18 14:50:56 +00:00
Merge branch 'ver/7.0.0' into dev/pipeline-reimplementation
This commit is contained in:
@@ -9,6 +9,9 @@ object Versions {
|
|||||||
const val slf4j = "1.7.36"
|
const val slf4j = "1.7.36"
|
||||||
const val log4j_slf4j_impl = "2.14.1"
|
const val log4j_slf4j_impl = "2.14.1"
|
||||||
|
|
||||||
|
const val caffeine = "3.1.0"
|
||||||
|
const val vavr = "0.10.4"
|
||||||
|
|
||||||
object Internal {
|
object Internal {
|
||||||
const val apacheText = "1.9"
|
const val apacheText = "1.9"
|
||||||
const val jafama = "2.3.2"
|
const val jafama = "2.3.2"
|
||||||
|
|||||||
+36
-35
@@ -10,58 +10,59 @@ import com.dfsek.terra.addons.biome.extrusion.config.BiomeExtrusionTemplate;
|
|||||||
import com.dfsek.terra.addons.biome.extrusion.config.ReplaceableBiomeLoader;
|
import com.dfsek.terra.addons.biome.extrusion.config.ReplaceableBiomeLoader;
|
||||||
import com.dfsek.terra.addons.biome.extrusion.config.extrusions.ReplaceExtrusionTemplate;
|
import com.dfsek.terra.addons.biome.extrusion.config.extrusions.ReplaceExtrusionTemplate;
|
||||||
import com.dfsek.terra.addons.biome.extrusion.config.extrusions.SetExtrusionTemplate;
|
import com.dfsek.terra.addons.biome.extrusion.config.extrusions.SetExtrusionTemplate;
|
||||||
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
|
import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer;
|
||||||
import com.dfsek.terra.api.Platform;
|
import com.dfsek.terra.addons.manifest.api.monad.Do;
|
||||||
import com.dfsek.terra.api.addon.BaseAddon;
|
import com.dfsek.terra.addons.manifest.api.monad.Get;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Init;
|
||||||
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPostLoadEvent;
|
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPostLoadEvent;
|
||||||
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
||||||
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
||||||
import com.dfsek.terra.api.inject.annotations.Inject;
|
|
||||||
import com.dfsek.terra.api.registry.CheckedRegistry;
|
import com.dfsek.terra.api.registry.CheckedRegistry;
|
||||||
import com.dfsek.terra.api.registry.Registry;
|
import com.dfsek.terra.api.registry.Registry;
|
||||||
|
import com.dfsek.terra.api.util.function.monad.Monad;
|
||||||
|
import com.dfsek.terra.api.util.generic.Construct;
|
||||||
import com.dfsek.terra.api.util.reflection.TypeKey;
|
import com.dfsek.terra.api.util.reflection.TypeKey;
|
||||||
import com.dfsek.terra.api.world.biome.Biome;
|
import com.dfsek.terra.api.world.biome.Biome;
|
||||||
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
|
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
|
||||||
|
|
||||||
|
|
||||||
public class BiomeExtrusionAddon implements AddonInitializer {
|
public class BiomeExtrusionAddon implements MonadAddonInitializer {
|
||||||
public static final TypeKey<Supplier<ObjectTemplate<Extrusion>>> EXTRUSION_REGISTRY_KEY = new TypeKey<>() {
|
public static final TypeKey<Supplier<ObjectTemplate<Extrusion>>> EXTRUSION_REGISTRY_KEY = new TypeKey<>() {
|
||||||
};
|
};
|
||||||
|
|
||||||
public static final TypeKey<Supplier<ObjectTemplate<BiomeProvider>>> PROVIDER_REGISTRY_KEY = new TypeKey<>() {
|
public static final TypeKey<Supplier<ObjectTemplate<BiomeProvider>>> PROVIDER_REGISTRY_KEY = new TypeKey<>() {
|
||||||
};
|
};
|
||||||
|
|
||||||
@Inject
|
|
||||||
private Platform platform;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private BaseAddon addon;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize() {
|
public Monad<?, Init<?>> initialize() {
|
||||||
platform.getEventManager()
|
return Do.with(
|
||||||
.getHandler(FunctionalEventHandler.class)
|
Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)),
|
||||||
.register(addon, ConfigPackPreLoadEvent.class)
|
Get.addon(),
|
||||||
.then(event -> {
|
Get.platform(),
|
||||||
CheckedRegistry<Supplier<ObjectTemplate<BiomeProvider>>> providerRegistry =
|
((functionalEventHandler, base, platform) -> Init.ofPure(Construct.construct(() -> {
|
||||||
event.getPack()
|
functionalEventHandler.register(base, ConfigPackPostLoadEvent.class)
|
||||||
.getOrCreateRegistry(PROVIDER_REGISTRY_KEY);
|
.then(event -> {
|
||||||
providerRegistry.register(addon.key("EXTRUSION"), BiomeExtrusionTemplate::new);
|
Registry<Biome> biomeRegistry = event.getPack().getRegistry(Biome.class);
|
||||||
})
|
event.getPack().applyLoader(ReplaceableBiome.class,
|
||||||
.then(event -> {
|
new ReplaceableBiomeLoader(biomeRegistry));
|
||||||
CheckedRegistry<Supplier<ObjectTemplate<Extrusion>>> extrusionRegistry = event.getPack().getOrCreateRegistry(
|
});
|
||||||
EXTRUSION_REGISTRY_KEY);
|
return functionalEventHandler.register(base, ConfigPackPreLoadEvent.class)
|
||||||
extrusionRegistry.register(addon.key("SET"), SetExtrusionTemplate::new);
|
.then(event -> {
|
||||||
extrusionRegistry.register(addon.key("REPLACE"), ReplaceExtrusionTemplate::new);
|
CheckedRegistry<Supplier<ObjectTemplate<BiomeProvider>>> providerRegistry =
|
||||||
})
|
event.getPack()
|
||||||
.failThrough();
|
.getOrCreateRegistry(PROVIDER_REGISTRY_KEY);
|
||||||
|
providerRegistry.register(base.key("EXTRUSION"), BiomeExtrusionTemplate::new);
|
||||||
platform.getEventManager()
|
})
|
||||||
.getHandler(FunctionalEventHandler.class)
|
.then(event -> {
|
||||||
.register(addon, ConfigPackPostLoadEvent.class)
|
CheckedRegistry<Supplier<ObjectTemplate<Extrusion>>> extrusionRegistry =
|
||||||
.then(event -> {
|
event.getPack().getOrCreateRegistry(
|
||||||
Registry<Biome> biomeRegistry = event.getPack().getRegistry(Biome.class);
|
EXTRUSION_REGISTRY_KEY);
|
||||||
event.getPack().applyLoader(ReplaceableBiome.class, new ReplaceableBiomeLoader(biomeRegistry));
|
extrusionRegistry.register(base.key("SET"), SetExtrusionTemplate::new);
|
||||||
});
|
extrusionRegistry.register(base.key("REPLACE"), ReplaceExtrusionTemplate::new);
|
||||||
|
})
|
||||||
|
.failThrough();
|
||||||
|
}))
|
||||||
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+22
-19
@@ -11,39 +11,42 @@ import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
|
|||||||
|
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
|
import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Do;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Get;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Init;
|
||||||
import com.dfsek.terra.api.Platform;
|
import com.dfsek.terra.api.Platform;
|
||||||
import com.dfsek.terra.api.addon.BaseAddon;
|
import com.dfsek.terra.api.addon.BaseAddon;
|
||||||
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
||||||
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
||||||
import com.dfsek.terra.api.inject.annotations.Inject;
|
import com.dfsek.terra.api.inject.annotations.Inject;
|
||||||
import com.dfsek.terra.api.registry.CheckedRegistry;
|
import com.dfsek.terra.api.registry.CheckedRegistry;
|
||||||
|
import com.dfsek.terra.api.util.function.monad.Monad;
|
||||||
import com.dfsek.terra.api.util.reflection.TypeKey;
|
import com.dfsek.terra.api.util.reflection.TypeKey;
|
||||||
import com.dfsek.terra.api.world.biome.Biome;
|
import com.dfsek.terra.api.world.biome.Biome;
|
||||||
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
|
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
|
||||||
|
|
||||||
|
|
||||||
public class ImageBiomeProviderAddon implements AddonInitializer {
|
public class ImageBiomeProviderAddon implements MonadAddonInitializer {
|
||||||
public static final TypeKey<Supplier<ObjectTemplate<BiomeProvider>>> PROVIDER_REGISTRY_KEY = new TypeKey<>() {
|
public static final TypeKey<Supplier<ObjectTemplate<BiomeProvider>>> PROVIDER_REGISTRY_KEY = new TypeKey<>() {
|
||||||
};
|
};
|
||||||
|
|
||||||
@Inject
|
|
||||||
private Platform platform;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private BaseAddon addon;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize() {
|
public Monad<?, Init<?>> initialize() {
|
||||||
platform.getEventManager()
|
return Do.with(
|
||||||
.getHandler(FunctionalEventHandler.class)
|
Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)),
|
||||||
.register(addon, ConfigPackPreLoadEvent.class)
|
Get.addon(),
|
||||||
.then(event -> {
|
Get.platform(),
|
||||||
CheckedRegistry<Supplier<ObjectTemplate<BiomeProvider>>> providerRegistry = event.getPack().getOrCreateRegistry(
|
((functionalEventHandler, base, platform) -> Init.ofPure(
|
||||||
PROVIDER_REGISTRY_KEY);
|
functionalEventHandler.register(base, ConfigPackPreLoadEvent.class)
|
||||||
providerRegistry.register(addon.key("IMAGE"),
|
.then(event -> {
|
||||||
() -> new ImageProviderTemplate(event.getPack().getRegistry(Biome.class)));
|
CheckedRegistry<Supplier<ObjectTemplate<BiomeProvider>>> providerRegistry = event.getPack().getOrCreateRegistry(
|
||||||
})
|
PROVIDER_REGISTRY_KEY);
|
||||||
.failThrough();
|
providerRegistry.register(base.key("IMAGE"),
|
||||||
|
() -> new ImageProviderTemplate(event.getPack().getRegistry(Biome.class)));
|
||||||
|
})
|
||||||
|
.failThrough()))
|
||||||
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+47
-42
@@ -23,21 +23,24 @@ import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.SmoothStageTem
|
|||||||
import com.dfsek.terra.addons.biome.pipeline.api.Source;
|
import com.dfsek.terra.addons.biome.pipeline.api.Source;
|
||||||
import com.dfsek.terra.addons.biome.pipeline.api.Stage;
|
import com.dfsek.terra.addons.biome.pipeline.api.Stage;
|
||||||
import com.dfsek.terra.addons.biome.pipeline.api.biome.PipelineBiome;
|
import com.dfsek.terra.addons.biome.pipeline.api.biome.PipelineBiome;
|
||||||
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
|
|
||||||
import com.dfsek.terra.api.Platform;
|
import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer;
|
||||||
import com.dfsek.terra.api.addon.BaseAddon;
|
import com.dfsek.terra.addons.manifest.api.monad.Do;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Get;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Init;
|
||||||
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPostLoadEvent;
|
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPostLoadEvent;
|
||||||
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
||||||
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
||||||
import com.dfsek.terra.api.inject.annotations.Inject;
|
|
||||||
import com.dfsek.terra.api.registry.CheckedRegistry;
|
import com.dfsek.terra.api.registry.CheckedRegistry;
|
||||||
import com.dfsek.terra.api.registry.Registry;
|
import com.dfsek.terra.api.registry.Registry;
|
||||||
|
import com.dfsek.terra.api.util.function.monad.Monad;
|
||||||
|
import com.dfsek.terra.api.util.generic.Construct;
|
||||||
import com.dfsek.terra.api.util.reflection.TypeKey;
|
import com.dfsek.terra.api.util.reflection.TypeKey;
|
||||||
import com.dfsek.terra.api.world.biome.Biome;
|
import com.dfsek.terra.api.world.biome.Biome;
|
||||||
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
|
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
|
||||||
|
|
||||||
|
|
||||||
public class BiomePipelineAddon implements AddonInitializer {
|
public class BiomePipelineAddon implements MonadAddonInitializer {
|
||||||
|
|
||||||
public static final TypeKey<Supplier<ObjectTemplate<Source>>> SOURCE_REGISTRY_KEY = new TypeKey<>() {
|
public static final TypeKey<Supplier<ObjectTemplate<Source>>> SOURCE_REGISTRY_KEY = new TypeKey<>() {
|
||||||
};
|
};
|
||||||
@@ -46,44 +49,46 @@ public class BiomePipelineAddon implements AddonInitializer {
|
|||||||
};
|
};
|
||||||
public static final TypeKey<Supplier<ObjectTemplate<BiomeProvider>>> PROVIDER_REGISTRY_KEY = new TypeKey<>() {
|
public static final TypeKey<Supplier<ObjectTemplate<BiomeProvider>>> PROVIDER_REGISTRY_KEY = new TypeKey<>() {
|
||||||
};
|
};
|
||||||
@Inject
|
|
||||||
private Platform platform;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private BaseAddon addon;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize() {
|
public Monad<?, Init<?>> initialize() {
|
||||||
platform.getEventManager()
|
return Do.with(
|
||||||
.getHandler(FunctionalEventHandler.class)
|
Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)),
|
||||||
.register(addon, ConfigPackPreLoadEvent.class)
|
Get.addon(),
|
||||||
.then(event -> {
|
((functionalEventHandler, base) -> Init.ofPure(Construct.construct(() -> {
|
||||||
CheckedRegistry<Supplier<ObjectTemplate<BiomeProvider>>> providerRegistry = event.getPack().getOrCreateRegistry(
|
functionalEventHandler.register(base, ConfigPackPreLoadEvent.class)
|
||||||
PROVIDER_REGISTRY_KEY);
|
.then(event -> {
|
||||||
providerRegistry.register(addon.key("PIPELINE"), BiomePipelineTemplate::new);
|
CheckedRegistry<Supplier<ObjectTemplate<BiomeProvider>>> providerRegistry =
|
||||||
})
|
event.getPack().getOrCreateRegistry(
|
||||||
.then(event -> {
|
PROVIDER_REGISTRY_KEY);
|
||||||
CheckedRegistry<Supplier<ObjectTemplate<Source>>> sourceRegistry = event.getPack().getOrCreateRegistry(
|
providerRegistry.register(base.key("PIPELINE"), BiomePipelineTemplate::new);
|
||||||
SOURCE_REGISTRY_KEY);
|
})
|
||||||
sourceRegistry.register(addon.key("SAMPLER"), SamplerSourceTemplate::new);
|
.then(event -> {
|
||||||
})
|
CheckedRegistry<Supplier<ObjectTemplate<Source>>> sourceRegistry =
|
||||||
.then(event -> {
|
event.getPack().getOrCreateRegistry(
|
||||||
CheckedRegistry<Supplier<ObjectTemplate<Stage>>> stageRegistry = event.getPack().getOrCreateRegistry(
|
SOURCE_REGISTRY_KEY);
|
||||||
STAGE_REGISTRY_KEY);
|
sourceRegistry.register(base.key("SAMPLER"), SamplerSourceTemplate::new);
|
||||||
stageRegistry.register(addon.key("FRACTAL_EXPAND"), ExpanderStageTemplate::new);
|
})
|
||||||
stageRegistry.register(addon.key("SMOOTH"), SmoothStageTemplate::new);
|
.then(event -> {
|
||||||
stageRegistry.register(addon.key("REPLACE"), ReplaceStageTemplate::new);
|
CheckedRegistry<Supplier<ObjectTemplate<Stage>>> stageRegistry =
|
||||||
stageRegistry.register(addon.key("REPLACE_LIST"), ReplaceListStageTemplate::new);
|
event.getPack().getOrCreateRegistry(
|
||||||
stageRegistry.register(addon.key("BORDER"), BorderStageTemplate::new);
|
STAGE_REGISTRY_KEY);
|
||||||
stageRegistry.register(addon.key("BORDER_LIST"), BorderListStageTemplate::new);
|
stageRegistry.register(base.key("FRACTAL_EXPAND"), ExpanderStageTemplate::new);
|
||||||
})
|
stageRegistry.register(base.key("SMOOTH"), SmoothStageTemplate::new);
|
||||||
.failThrough();
|
stageRegistry.register(base.key("REPLACE"), ReplaceStageTemplate::new);
|
||||||
platform.getEventManager()
|
stageRegistry.register(base.key("REPLACE_LIST"), ReplaceListStageTemplate::new);
|
||||||
.getHandler(FunctionalEventHandler.class)
|
stageRegistry.register(base.key("BORDER"), BorderStageTemplate::new);
|
||||||
.register(addon, ConfigPackPostLoadEvent.class)
|
stageRegistry.register(base.key("BORDER_LIST"), BorderListStageTemplate::new);
|
||||||
.then(event -> {
|
})
|
||||||
Registry<Biome> biomeRegistry = event.getPack().getRegistry(Biome.class);
|
.failThrough();
|
||||||
event.getPack().applyLoader(PipelineBiome.class, new PipelineBiomeLoader(biomeRegistry));
|
return functionalEventHandler.register(base, ConfigPackPostLoadEvent.class)
|
||||||
});
|
.then(event -> {
|
||||||
|
Registry<Biome> biomeRegistry = event.getPack().getRegistry(Biome.class);
|
||||||
|
event.getPack().applyLoader(PipelineBiome.class,
|
||||||
|
new PipelineBiomeLoader(biomeRegistry));
|
||||||
|
});
|
||||||
|
|
||||||
|
})))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+20
-12
@@ -11,18 +11,22 @@ import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
|
|||||||
|
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
|
import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Do;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Get;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Init;
|
||||||
import com.dfsek.terra.api.Platform;
|
import com.dfsek.terra.api.Platform;
|
||||||
import com.dfsek.terra.api.addon.BaseAddon;
|
import com.dfsek.terra.api.addon.BaseAddon;
|
||||||
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
||||||
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
||||||
import com.dfsek.terra.api.inject.annotations.Inject;
|
import com.dfsek.terra.api.inject.annotations.Inject;
|
||||||
import com.dfsek.terra.api.registry.CheckedRegistry;
|
import com.dfsek.terra.api.registry.CheckedRegistry;
|
||||||
|
import com.dfsek.terra.api.util.function.monad.Monad;
|
||||||
import com.dfsek.terra.api.util.reflection.TypeKey;
|
import com.dfsek.terra.api.util.reflection.TypeKey;
|
||||||
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
|
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
|
||||||
|
|
||||||
|
|
||||||
public class SingleBiomeProviderAddon implements AddonInitializer {
|
public class SingleBiomeProviderAddon implements MonadAddonInitializer {
|
||||||
public static final TypeKey<Supplier<ObjectTemplate<BiomeProvider>>> PROVIDER_REGISTRY_KEY = new TypeKey<>() {
|
public static final TypeKey<Supplier<ObjectTemplate<BiomeProvider>>> PROVIDER_REGISTRY_KEY = new TypeKey<>() {
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -33,15 +37,19 @@ public class SingleBiomeProviderAddon implements AddonInitializer {
|
|||||||
private BaseAddon addon;
|
private BaseAddon addon;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize() {
|
public Monad<?, Init<?>> initialize() {
|
||||||
platform.getEventManager()
|
return Do.with(
|
||||||
.getHandler(FunctionalEventHandler.class)
|
Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)),
|
||||||
.register(addon, ConfigPackPreLoadEvent.class)
|
Get.addon(),
|
||||||
.then(event -> {
|
Get.platform(),
|
||||||
CheckedRegistry<Supplier<ObjectTemplate<BiomeProvider>>> providerRegistry = event.getPack().getOrCreateRegistry(
|
((handler, base, platform) -> Init.ofPure(
|
||||||
PROVIDER_REGISTRY_KEY);
|
handler.register(addon, ConfigPackPreLoadEvent.class)
|
||||||
providerRegistry.register(addon.key("SINGLE"), SingleBiomeProviderTemplate::new);
|
.then(event -> {
|
||||||
})
|
CheckedRegistry<Supplier<ObjectTemplate<BiomeProvider>>> providerRegistry = event.getPack().getOrCreateRegistry(
|
||||||
.failThrough();
|
PROVIDER_REGISTRY_KEY);
|
||||||
|
providerRegistry.register(addon.key("SINGLE"), SingleBiomeProviderTemplate::new);
|
||||||
|
})
|
||||||
|
.failThrough()))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+26
-26
@@ -4,43 +4,43 @@ import java.util.Collection;
|
|||||||
|
|
||||||
import com.dfsek.terra.addons.biome.query.impl.BiomeTagFlattener;
|
import com.dfsek.terra.addons.biome.query.impl.BiomeTagFlattener;
|
||||||
import com.dfsek.terra.addons.biome.query.impl.BiomeTagHolder;
|
import com.dfsek.terra.addons.biome.query.impl.BiomeTagHolder;
|
||||||
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
|
import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer;
|
||||||
import com.dfsek.terra.api.Platform;
|
import com.dfsek.terra.addons.manifest.api.monad.Do;
|
||||||
import com.dfsek.terra.api.addon.BaseAddon;
|
import com.dfsek.terra.addons.manifest.api.monad.Get;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Init;
|
||||||
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPostLoadEvent;
|
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPostLoadEvent;
|
||||||
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
||||||
import com.dfsek.terra.api.inject.annotations.Inject;
|
|
||||||
import com.dfsek.terra.api.properties.Context;
|
import com.dfsek.terra.api.properties.Context;
|
||||||
import com.dfsek.terra.api.properties.PropertyKey;
|
import com.dfsek.terra.api.properties.PropertyKey;
|
||||||
|
import com.dfsek.terra.api.util.function.monad.Monad;
|
||||||
import com.dfsek.terra.api.world.biome.Biome;
|
import com.dfsek.terra.api.world.biome.Biome;
|
||||||
|
|
||||||
|
|
||||||
public class BiomeQueryAPIAddon implements AddonInitializer {
|
public class BiomeQueryAPIAddon implements MonadAddonInitializer {
|
||||||
public static PropertyKey<BiomeTagHolder> BIOME_TAG_KEY = Context.create(BiomeTagHolder.class);
|
public static PropertyKey<BiomeTagHolder> BIOME_TAG_KEY = Context.create(BiomeTagHolder.class);
|
||||||
@Inject
|
|
||||||
private Platform platform;
|
|
||||||
@Inject
|
|
||||||
private BaseAddon addon;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize() {
|
public Monad<?, Init<?>> initialize() {
|
||||||
|
return Do.with(
|
||||||
|
Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)),
|
||||||
|
Get.addon(),
|
||||||
|
((functionalEventHandler, base) -> Init.ofPure(
|
||||||
|
functionalEventHandler.register(base, ConfigPackPostLoadEvent.class)
|
||||||
|
.then(event -> {
|
||||||
|
Collection<Biome> biomes = event
|
||||||
|
.getPack()
|
||||||
|
.getRegistry(Biome.class)
|
||||||
|
.entries();
|
||||||
|
|
||||||
platform.getEventManager()
|
BiomeTagFlattener flattener = new BiomeTagFlattener(
|
||||||
.getHandler(FunctionalEventHandler.class)
|
biomes.stream()
|
||||||
.register(addon, ConfigPackPostLoadEvent.class)
|
.flatMap(biome -> biome.getTags().stream())
|
||||||
.then(event -> {
|
.toList());
|
||||||
Collection<Biome> biomes = event
|
|
||||||
.getPack()
|
|
||||||
.getRegistry(Biome.class)
|
|
||||||
.entries();
|
|
||||||
|
|
||||||
BiomeTagFlattener flattener = new BiomeTagFlattener(biomes
|
biomes.forEach(biome -> biome.getContext()
|
||||||
.stream()
|
.put(BIOME_TAG_KEY, new BiomeTagHolder(biome, flattener)));
|
||||||
.flatMap(biome -> biome.getTags().stream())
|
})
|
||||||
.toList());
|
.global()
|
||||||
|
)));
|
||||||
biomes.forEach(biome -> biome.getContext().put(BIOME_TAG_KEY, new BiomeTagHolder(biome, flattener)));
|
|
||||||
})
|
|
||||||
.global();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+39
-41
@@ -14,60 +14,58 @@ import com.dfsek.terra.addons.chunkgenerator.config.palette.BiomePaletteTemplate
|
|||||||
import com.dfsek.terra.addons.chunkgenerator.config.palette.PaletteInfo;
|
import com.dfsek.terra.addons.chunkgenerator.config.palette.PaletteInfo;
|
||||||
import com.dfsek.terra.addons.chunkgenerator.config.palette.SlantLayer;
|
import com.dfsek.terra.addons.chunkgenerator.config.palette.SlantLayer;
|
||||||
import com.dfsek.terra.addons.chunkgenerator.generation.NoiseChunkGenerator3D;
|
import com.dfsek.terra.addons.chunkgenerator.generation.NoiseChunkGenerator3D;
|
||||||
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
|
import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer;
|
||||||
import com.dfsek.terra.api.Platform;
|
import com.dfsek.terra.addons.manifest.api.monad.Do;
|
||||||
import com.dfsek.terra.api.addon.BaseAddon;
|
import com.dfsek.terra.addons.manifest.api.monad.Get;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Init;
|
||||||
import com.dfsek.terra.api.event.events.config.ConfigurationLoadEvent;
|
import com.dfsek.terra.api.event.events.config.ConfigurationLoadEvent;
|
||||||
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
||||||
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
||||||
import com.dfsek.terra.api.inject.annotations.Inject;
|
|
||||||
import com.dfsek.terra.api.properties.Context;
|
import com.dfsek.terra.api.properties.Context;
|
||||||
import com.dfsek.terra.api.properties.PropertyKey;
|
import com.dfsek.terra.api.properties.PropertyKey;
|
||||||
|
import com.dfsek.terra.api.util.function.monad.Monad;
|
||||||
|
import com.dfsek.terra.api.util.generic.Construct;
|
||||||
import com.dfsek.terra.api.world.biome.Biome;
|
import com.dfsek.terra.api.world.biome.Biome;
|
||||||
import com.dfsek.terra.api.world.chunk.generation.util.provider.ChunkGeneratorProvider;
|
import com.dfsek.terra.api.world.chunk.generation.util.provider.ChunkGeneratorProvider;
|
||||||
|
|
||||||
|
|
||||||
public class NoiseChunkGenerator3DAddon implements AddonInitializer {
|
public class NoiseChunkGenerator3DAddon implements MonadAddonInitializer {
|
||||||
@Inject
|
|
||||||
private Platform platform;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private BaseAddon addon;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize() {
|
public Monad<?, Init<?>> initialize() {
|
||||||
PropertyKey<PaletteInfo> paletteInfoPropertyKey = Context.create(PaletteInfo.class);
|
PropertyKey<PaletteInfo> paletteInfoPropertyKey = Context.create(PaletteInfo.class);
|
||||||
PropertyKey<BiomeNoiseProperties> noisePropertiesPropertyKey = Context.create(BiomeNoiseProperties.class);
|
PropertyKey<BiomeNoiseProperties> noisePropertiesPropertyKey = Context.create(BiomeNoiseProperties.class);
|
||||||
platform.getEventManager()
|
return Do.with(
|
||||||
.getHandler(FunctionalEventHandler.class)
|
Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)),
|
||||||
.register(addon, ConfigPackPreLoadEvent.class)
|
Get.addon(),
|
||||||
.priority(1000)
|
Get.platform(),
|
||||||
.then(event -> {
|
((handler, base, platform) -> Init.ofPure(Construct.construct(() -> {
|
||||||
NoiseChunkGeneratorPackConfigTemplate config = event.loadTemplate(new NoiseChunkGeneratorPackConfigTemplate());
|
handler.register(base, ConfigPackPreLoadEvent.class)
|
||||||
|
.priority(1000)
|
||||||
|
.then(event -> {
|
||||||
|
NoiseChunkGeneratorPackConfigTemplate config = event.loadTemplate(new NoiseChunkGeneratorPackConfigTemplate());
|
||||||
|
|
||||||
event.getPack()
|
event.getPack()
|
||||||
.getOrCreateRegistry(ChunkGeneratorProvider.class)
|
.getOrCreateRegistry(ChunkGeneratorProvider.class)
|
||||||
.register(addon.key("NOISE_3D"),
|
.register(base.key("NOISE_3D"),
|
||||||
pack -> new NoiseChunkGenerator3D(pack, platform, config.getElevationBlend(),
|
pack -> new NoiseChunkGenerator3D(pack, platform, config.getElevationBlend(),
|
||||||
config.getHorizontalRes(),
|
config.getHorizontalRes(),
|
||||||
config.getVerticalRes(), noisePropertiesPropertyKey,
|
config.getVerticalRes(), noisePropertiesPropertyKey,
|
||||||
paletteInfoPropertyKey));
|
paletteInfoPropertyKey));
|
||||||
event.getPack()
|
event.getPack()
|
||||||
.applyLoader(SlantLayer.class, SlantLayer::new);
|
.applyLoader(SlantLayer.class, SlantLayer::new);
|
||||||
})
|
})
|
||||||
.failThrough();
|
.failThrough();
|
||||||
|
return handler.register(base, ConfigurationLoadEvent.class)
|
||||||
|
.then(event -> {
|
||||||
|
if(event.is(Biome.class)) {
|
||||||
|
event.getLoadedObject(Biome.class).getContext().put(paletteInfoPropertyKey,
|
||||||
|
event.load(new BiomePaletteTemplate(platform)).get());
|
||||||
|
event.getLoadedObject(Biome.class).getContext().put(noisePropertiesPropertyKey,
|
||||||
|
event.load(new BiomeNoiseConfigTemplate()).get());
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.failThrough();
|
||||||
|
}))));
|
||||||
|
|
||||||
platform.getEventManager()
|
|
||||||
.getHandler(FunctionalEventHandler.class)
|
|
||||||
.register(addon, ConfigurationLoadEvent.class)
|
|
||||||
.then(event -> {
|
|
||||||
if(event.is(Biome.class)) {
|
|
||||||
event.getLoadedObject(Biome.class).getContext().put(paletteInfoPropertyKey,
|
|
||||||
event.load(new BiomePaletteTemplate(platform)).get());
|
|
||||||
event.getLoadedObject(Biome.class).getContext().put(noisePropertiesPropertyKey,
|
|
||||||
event.load(new BiomeNoiseConfigTemplate()).get());
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.failThrough();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+57
-49
@@ -3,7 +3,10 @@ package com.dfsek.terra.addons.commands.addons;
|
|||||||
import cloud.commandframework.ArgumentDescription;
|
import cloud.commandframework.ArgumentDescription;
|
||||||
import cloud.commandframework.CommandManager;
|
import cloud.commandframework.CommandManager;
|
||||||
|
|
||||||
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
|
import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Do;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Get;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Init;
|
||||||
import com.dfsek.terra.api.Platform;
|
import com.dfsek.terra.api.Platform;
|
||||||
import com.dfsek.terra.api.addon.BaseAddon;
|
import com.dfsek.terra.api.addon.BaseAddon;
|
||||||
import com.dfsek.terra.api.command.CommandSender;
|
import com.dfsek.terra.api.command.CommandSender;
|
||||||
@@ -11,59 +14,64 @@ import com.dfsek.terra.api.command.arguments.RegistryArgument;
|
|||||||
import com.dfsek.terra.api.event.events.platform.CommandRegistrationEvent;
|
import com.dfsek.terra.api.event.events.platform.CommandRegistrationEvent;
|
||||||
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
||||||
import com.dfsek.terra.api.inject.annotations.Inject;
|
import com.dfsek.terra.api.inject.annotations.Inject;
|
||||||
|
import com.dfsek.terra.api.util.function.monad.Monad;
|
||||||
|
|
||||||
|
|
||||||
public class AddonsCommandAddon implements AddonInitializer {
|
public class AddonsCommandAddon implements MonadAddonInitializer {
|
||||||
@Inject
|
|
||||||
private Platform platform;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private BaseAddon addon;
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize() {
|
public Monad<?, Init<?>> initialize() {
|
||||||
platform.getEventManager()
|
return Do.with(
|
||||||
.getHandler(FunctionalEventHandler.class)
|
Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)),
|
||||||
.register(addon, CommandRegistrationEvent.class)
|
Get.addon(),
|
||||||
.then(event -> {
|
Get.platform(),
|
||||||
CommandManager<CommandSender> manager = event.getCommandManager();
|
((functionalEventHandler, base, platform) -> Init.ofPure(
|
||||||
|
functionalEventHandler
|
||||||
|
.register(base, CommandRegistrationEvent.class)
|
||||||
|
.then(event -> {
|
||||||
|
CommandManager<CommandSender> manager = event.getCommandManager();
|
||||||
|
|
||||||
manager.command(
|
manager.command(
|
||||||
manager.commandBuilder("addons", ArgumentDescription.of("List installed Terra addons"))
|
manager.commandBuilder("addons", ArgumentDescription.of(
|
||||||
.permission("terra.addons")
|
"List installed Terra addons"))
|
||||||
.handler(context -> {
|
.permission("terra.addons")
|
||||||
StringBuilder addons = new StringBuilder("Installed addons:\n");
|
.handler(context -> {
|
||||||
platform.getAddons()
|
StringBuilder addons = new StringBuilder(
|
||||||
.forEach(addon -> addons
|
"Installed addons:\n");
|
||||||
.append(" - ")
|
platform.getAddons()
|
||||||
.append(addon.getID())
|
.forEach(addon -> addons
|
||||||
.append('@')
|
.append(" - ")
|
||||||
.append(addon.getVersion().getFormatted())
|
.append(addon.getID())
|
||||||
.append('\n'));
|
.append('@')
|
||||||
context.getSender().sendMessage(addons.toString());
|
.append(addon.getVersion().getFormatted())
|
||||||
})
|
.append('\n'));
|
||||||
)
|
context.getSender().sendMessage(addons.toString());
|
||||||
.command(
|
})
|
||||||
manager.commandBuilder("addons")
|
)
|
||||||
.argument(RegistryArgument.of("addon", platform.getAddons()))
|
.command(
|
||||||
.permission("terra.addons.info")
|
manager.commandBuilder("addons")
|
||||||
.handler(context -> {
|
.argument(
|
||||||
BaseAddon addon = context.get("addon");
|
RegistryArgument.of("addon", platform.getAddons()))
|
||||||
StringBuilder addonInfo = new StringBuilder("Addon ").append(addon.getID()).append('\n');
|
.permission("terra.addons.info")
|
||||||
|
.handler(context -> {
|
||||||
|
BaseAddon addon = context.get("addon");
|
||||||
|
StringBuilder addonInfo = new StringBuilder(
|
||||||
|
"Addon ").append(addon.getID()).append('\n');
|
||||||
|
|
||||||
addonInfo.append("Version: ").append(addon.getVersion().getFormatted()).append('\n');
|
addonInfo.append("Version: ").append(
|
||||||
|
addon.getVersion().getFormatted()).append('\n');
|
||||||
|
|
||||||
addonInfo.append("Dependencies:\n");
|
addonInfo.append("Dependencies:\n");
|
||||||
addon.getDependencies().forEach((id, versions) -> addonInfo
|
addon.getDependencies().forEach(
|
||||||
.append(" - ")
|
(id, versions) -> addonInfo
|
||||||
.append(id)
|
.append(" - ")
|
||||||
.append('@')
|
.append(id)
|
||||||
.append(versions.getFormatted())
|
.append('@')
|
||||||
.append('\n'));
|
.append(versions.getFormatted())
|
||||||
context.getSender().sendMessage(addonInfo.toString());
|
.append('\n'));
|
||||||
})
|
context.getSender().sendMessage(addonInfo.toString());
|
||||||
);
|
})
|
||||||
});
|
);
|
||||||
|
})))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+73
-63
@@ -2,10 +2,21 @@ package com.dfsek.terra.addons.commands.packs;
|
|||||||
|
|
||||||
import cloud.commandframework.ArgumentDescription;
|
import cloud.commandframework.ArgumentDescription;
|
||||||
import cloud.commandframework.CommandManager;
|
import cloud.commandframework.CommandManager;
|
||||||
|
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
|
||||||
|
|
||||||
|
import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Do;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Get;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Init;
|
||||||
|
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
||||||
|
import com.dfsek.terra.api.registry.CheckedRegistry;
|
||||||
|
import com.dfsek.terra.api.util.function.monad.Monad;
|
||||||
|
import com.dfsek.terra.api.world.biome.Biome;
|
||||||
|
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
|
|
||||||
import com.dfsek.terra.api.Platform;
|
import com.dfsek.terra.api.Platform;
|
||||||
import com.dfsek.terra.api.addon.BaseAddon;
|
import com.dfsek.terra.api.addon.BaseAddon;
|
||||||
import com.dfsek.terra.api.command.CommandSender;
|
import com.dfsek.terra.api.command.CommandSender;
|
||||||
@@ -15,74 +26,73 @@ import com.dfsek.terra.api.event.events.platform.CommandRegistrationEvent;
|
|||||||
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
||||||
import com.dfsek.terra.api.inject.annotations.Inject;
|
import com.dfsek.terra.api.inject.annotations.Inject;
|
||||||
|
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
public class PacksCommandAddon implements AddonInitializer {
|
|
||||||
|
public class PacksCommandAddon implements MonadAddonInitializer {
|
||||||
private static final Logger logger = LoggerFactory.getLogger(PacksCommandAddon.class);
|
private static final Logger logger = LoggerFactory.getLogger(PacksCommandAddon.class);
|
||||||
|
|
||||||
@Inject
|
|
||||||
private Platform platform;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private BaseAddon addon;
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize() {
|
public Monad<?, Init<?>> initialize() {
|
||||||
platform.getEventManager()
|
return Do.with(
|
||||||
.getHandler(FunctionalEventHandler.class)
|
Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)),
|
||||||
.register(addon, CommandRegistrationEvent.class)
|
Get.addon(),
|
||||||
.then(event -> {
|
Get.platform(),
|
||||||
CommandManager<CommandSender> manager = event.getCommandManager();
|
((functionalEventHandler, base, platform) -> Init.ofPure(
|
||||||
|
functionalEventHandler.register(base, CommandRegistrationEvent.class)
|
||||||
|
.then(event -> {
|
||||||
|
CommandManager<CommandSender> manager = event.getCommandManager();
|
||||||
|
|
||||||
manager.command(
|
manager.command(
|
||||||
manager.commandBuilder("packs", ArgumentDescription.of("List installed config packs"))
|
manager.commandBuilder("packs", ArgumentDescription.of("List installed config packs"))
|
||||||
.permission("terra.packs")
|
.permission("terra.packs")
|
||||||
.handler(context -> {
|
.handler(context -> {
|
||||||
StringBuilder packs = new StringBuilder("Installed packs:\n");
|
StringBuilder packs = new StringBuilder("Installed packs:\n");
|
||||||
platform.getConfigRegistry().forEach(pack -> packs.append(" - ")
|
platform.getConfigRegistry().forEach(pack -> packs.append(" - ")
|
||||||
.append(pack.getID())
|
.append(pack.getID())
|
||||||
.append('@')
|
.append('@')
|
||||||
.append(pack.getVersion().getFormatted()));
|
.append(pack.getVersion().getFormatted()));
|
||||||
context.getSender().sendMessage(packs.toString());
|
context.getSender().sendMessage(packs.toString());
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
.command(
|
.command(
|
||||||
manager.commandBuilder("packs")
|
manager.commandBuilder("packs")
|
||||||
.literal("info", ArgumentDescription.of("Get information about a pack"))
|
.literal("info", ArgumentDescription.of("Get information about a pack"))
|
||||||
.permission("terra.packs.info")
|
.permission("terra.packs.info")
|
||||||
.argument(RegistryArgument.of("pack", platform.getConfigRegistry()))
|
.argument(RegistryArgument.of("pack", platform.getConfigRegistry()))
|
||||||
.handler(context -> {
|
.handler(context -> {
|
||||||
ConfigPack pack = context.get("pack");
|
ConfigPack pack = context.get("pack");
|
||||||
StringBuilder packInfo = new StringBuilder("Pack ").append(pack.getID()).append('\n');
|
StringBuilder packInfo = new StringBuilder("Pack ").append(pack.getID()).append('\n');
|
||||||
|
|
||||||
packInfo.append("Version: ").append(pack.getVersion().getFormatted()).append('\n');
|
packInfo.append("Version: ").append(pack.getVersion().getFormatted()).append('\n');
|
||||||
packInfo.append("Author: ").append(pack.getAuthor()).append('\n');
|
packInfo.append("Author: ").append(pack.getAuthor()).append('\n');
|
||||||
|
|
||||||
packInfo.append("Addon Dependencies:\n");
|
packInfo.append("Addon Dependencies:\n");
|
||||||
pack.addons().forEach((id, versions) -> packInfo
|
pack.addons().forEach((id, versions) -> packInfo
|
||||||
.append(" - ")
|
.append(" - ")
|
||||||
.append(id.getID())
|
.append(id.getID())
|
||||||
.append('@')
|
.append('@')
|
||||||
.append(versions.getFormatted())
|
.append(versions.getFormatted())
|
||||||
.append('\n'));
|
.append('\n'));
|
||||||
context.getSender().sendMessage(packInfo.toString());
|
context.getSender().sendMessage(packInfo.toString());
|
||||||
}))
|
}))
|
||||||
.command(
|
.command(
|
||||||
manager.commandBuilder("packs")
|
manager.commandBuilder("packs")
|
||||||
.literal("reload", ArgumentDescription.of("Reload config packs"))
|
.literal("reload", ArgumentDescription.of("Reload config packs"))
|
||||||
.permission("terra.packs.reload")
|
.permission("terra.packs.reload")
|
||||||
.handler(context -> {
|
.handler(context -> {
|
||||||
context.getSender().sendMessage("Reloading Terra...");
|
context.getSender().sendMessage("Reloading Terra...");
|
||||||
logger.info("Reloading Terra...");
|
logger.info("Reloading Terra...");
|
||||||
if(platform.reload()) {
|
if(platform.reload()) {
|
||||||
logger.info("Terra reloaded successfully.");
|
logger.info("Terra reloaded successfully.");
|
||||||
context.getSender().sendMessage("Terra reloaded successfully.");
|
context.getSender().sendMessage("Terra reloaded successfully.");
|
||||||
} else {
|
} else {
|
||||||
logger.error("Terra failed to reload.");
|
logger.error("Terra failed to reload.");
|
||||||
context.getSender().sendMessage(
|
context.getSender().sendMessage(
|
||||||
"Terra failed to reload. See logs for more information.");
|
"Terra failed to reload. See logs for more information.");
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
});
|
})))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+59
-54
@@ -2,10 +2,18 @@ package com.dfsek.terra.addons.commands.profiler;
|
|||||||
|
|
||||||
import cloud.commandframework.ArgumentDescription;
|
import cloud.commandframework.ArgumentDescription;
|
||||||
import cloud.commandframework.CommandManager;
|
import cloud.commandframework.CommandManager;
|
||||||
|
|
||||||
|
import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Do;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Get;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Init;
|
||||||
|
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
||||||
|
|
||||||
|
import com.dfsek.terra.api.util.function.monad.Monad;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
|
|
||||||
import com.dfsek.terra.api.Platform;
|
import com.dfsek.terra.api.Platform;
|
||||||
import com.dfsek.terra.api.addon.BaseAddon;
|
import com.dfsek.terra.api.addon.BaseAddon;
|
||||||
import com.dfsek.terra.api.command.CommandSender;
|
import com.dfsek.terra.api.command.CommandSender;
|
||||||
@@ -14,61 +22,58 @@ import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
|||||||
import com.dfsek.terra.api.inject.annotations.Inject;
|
import com.dfsek.terra.api.inject.annotations.Inject;
|
||||||
|
|
||||||
|
|
||||||
public class ProfilerCommandAddon implements AddonInitializer {
|
public class ProfilerCommandAddon implements MonadAddonInitializer {
|
||||||
private static final Logger logger = LoggerFactory.getLogger(ProfilerCommandAddon.class);
|
private static final Logger logger = LoggerFactory.getLogger(ProfilerCommandAddon.class);
|
||||||
|
|
||||||
@Inject
|
|
||||||
private Platform platform;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private BaseAddon addon;
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize() {
|
public Monad<?, Init<?>> initialize() {
|
||||||
platform.getEventManager()
|
return Do.with(
|
||||||
.getHandler(FunctionalEventHandler.class)
|
Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)),
|
||||||
.register(addon, CommandRegistrationEvent.class)
|
Get.addon(),
|
||||||
.then(event -> {
|
Get.platform(),
|
||||||
CommandManager<CommandSender> manager = event.getCommandManager();
|
((handler, base, platform) -> Init.ofPure(
|
||||||
manager
|
handler.register(base, CommandRegistrationEvent.class)
|
||||||
.command(
|
.then(event -> {
|
||||||
manager.commandBuilder("profiler", ArgumentDescription.of("Access the profiler"))
|
CommandManager<CommandSender> manager = event.getCommandManager();
|
||||||
.literal("start", ArgumentDescription.of("Start profiling"), "st")
|
manager
|
||||||
.permission("terra.profiler.start")
|
.command(
|
||||||
.handler(context -> {
|
manager.commandBuilder("profiler", ArgumentDescription.of("Access the profiler"))
|
||||||
platform.getProfiler().start();
|
.literal("start", ArgumentDescription.of("Start profiling"), "st")
|
||||||
context.getSender().sendMessage("Profiling started.");
|
.permission("terra.profiler.start")
|
||||||
}))
|
.handler(context -> {
|
||||||
.command(
|
platform.getProfiler().start();
|
||||||
manager.commandBuilder("profiler", ArgumentDescription.of("Access the profiler"))
|
context.getSender().sendMessage("Profiling started.");
|
||||||
.literal("stop", ArgumentDescription.of("Stop profiling"), "s")
|
}))
|
||||||
.permission("terra.profiler.stop")
|
.command(
|
||||||
.handler(context -> {
|
manager.commandBuilder("profiler", ArgumentDescription.of("Access the profiler"))
|
||||||
platform.getProfiler().stop();
|
.literal("stop", ArgumentDescription.of("Stop profiling"), "s")
|
||||||
context.getSender().sendMessage("Profiling stopped.");
|
.permission("terra.profiler.stop")
|
||||||
}))
|
.handler(context -> {
|
||||||
.command(
|
platform.getProfiler().stop();
|
||||||
manager.commandBuilder("profiler", ArgumentDescription.of("Access the profiler"))
|
context.getSender().sendMessage("Profiling stopped.");
|
||||||
.literal("query", ArgumentDescription.of("Query profiler results"), "q")
|
}))
|
||||||
.permission("terra.profiler.query")
|
.command(
|
||||||
.handler(context -> {
|
manager.commandBuilder("profiler", ArgumentDescription.of("Access the profiler"))
|
||||||
StringBuilder data = new StringBuilder("Terra Profiler data: \n");
|
.literal("query", ArgumentDescription.of("Query profiler results"), "q")
|
||||||
platform.getProfiler().getTimings().forEach((id, timings) -> data.append(id)
|
.permission("terra.profiler.query")
|
||||||
.append(": ")
|
.handler(context -> {
|
||||||
.append(timings.toString())
|
StringBuilder data = new StringBuilder("Terra Profiler data: \n");
|
||||||
.append('\n'));
|
platform.getProfiler().getTimings().forEach((id, timings) -> data.append(id)
|
||||||
logger.info(data.toString());
|
.append(": ")
|
||||||
context.getSender().sendMessage("Profiling data dumped to console.");
|
.append(timings.toString())
|
||||||
}))
|
.append('\n'));
|
||||||
.command(
|
logger.info(data.toString());
|
||||||
manager.commandBuilder("profiler", ArgumentDescription.of("Access the profiler"))
|
context.getSender().sendMessage("Profiling data dumped to console.");
|
||||||
.literal("reset", ArgumentDescription.of("Reset the profiler"), "r")
|
}))
|
||||||
.permission("terra.profiler.reset")
|
.command(
|
||||||
.handler(context -> {
|
manager.commandBuilder("profiler", ArgumentDescription.of("Access the profiler"))
|
||||||
platform.getProfiler().reset();
|
.literal("reset", ArgumentDescription.of("Reset the profiler"), "r")
|
||||||
context.getSender().sendMessage("Profiler reset.");
|
.permission("terra.profiler.reset")
|
||||||
}));
|
.handler(context -> {
|
||||||
});
|
platform.getProfiler().reset();
|
||||||
|
context.getSender().sendMessage("Profiler reset.");
|
||||||
|
}));
|
||||||
|
})))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+37
-35
@@ -8,60 +8,62 @@ import cloud.commandframework.context.CommandContext;
|
|||||||
|
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
|
import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Do;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Get;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Init;
|
||||||
import com.dfsek.terra.api.Platform;
|
import com.dfsek.terra.api.Platform;
|
||||||
import com.dfsek.terra.api.addon.BaseAddon;
|
import com.dfsek.terra.api.addon.BaseAddon;
|
||||||
import com.dfsek.terra.api.command.CommandSender;
|
import com.dfsek.terra.api.command.CommandSender;
|
||||||
import com.dfsek.terra.api.command.arguments.RegistryArgument;
|
import com.dfsek.terra.api.command.arguments.RegistryArgument;
|
||||||
import com.dfsek.terra.api.entity.Entity;
|
import com.dfsek.terra.api.entity.Entity;
|
||||||
|
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
||||||
import com.dfsek.terra.api.event.events.platform.CommandRegistrationEvent;
|
import com.dfsek.terra.api.event.events.platform.CommandRegistrationEvent;
|
||||||
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
||||||
import com.dfsek.terra.api.inject.annotations.Inject;
|
import com.dfsek.terra.api.inject.annotations.Inject;
|
||||||
import com.dfsek.terra.api.registry.Registry;
|
import com.dfsek.terra.api.registry.Registry;
|
||||||
import com.dfsek.terra.api.structure.Structure;
|
import com.dfsek.terra.api.structure.Structure;
|
||||||
import com.dfsek.terra.api.util.Rotation;
|
import com.dfsek.terra.api.util.Rotation;
|
||||||
|
import com.dfsek.terra.api.util.function.monad.Monad;
|
||||||
import com.dfsek.terra.api.util.reflection.TypeKey;
|
import com.dfsek.terra.api.util.reflection.TypeKey;
|
||||||
|
|
||||||
|
|
||||||
public class StructureCommandAddon implements AddonInitializer {
|
public class StructureCommandAddon implements MonadAddonInitializer {
|
||||||
@Inject
|
|
||||||
private Platform platform;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private BaseAddon addon;
|
|
||||||
|
|
||||||
private static Registry<Structure> getStructureRegistry(CommandContext<CommandSender> sender) {
|
private static Registry<Structure> getStructureRegistry(CommandContext<CommandSender> sender) {
|
||||||
return sender.getSender().getEntity().orElseThrow().world().getPack().getRegistry(Structure.class);
|
return sender.getSender().getEntity().orElseThrow().world().getPack().getRegistry(Structure.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize() {
|
public Monad<?, Init<?>> initialize() {
|
||||||
platform.getEventManager()
|
return Do.with(
|
||||||
.getHandler(FunctionalEventHandler.class)
|
Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)),
|
||||||
.register(addon, CommandRegistrationEvent.class)
|
Get.addon(),
|
||||||
.then(event -> {
|
((handler, base) -> Init.ofPure(
|
||||||
CommandManager<CommandSender> manager = event.getCommandManager();
|
handler.register(base, CommandRegistrationEvent.class)
|
||||||
|
.then(event -> {
|
||||||
|
CommandManager<CommandSender> manager = event.getCommandManager();
|
||||||
|
|
||||||
manager.command(
|
manager.command(
|
||||||
manager.commandBuilder("structures", ArgumentDescription.of("Manage or generate structures"))
|
manager.commandBuilder("structures", ArgumentDescription.of("Manage or generate structures"))
|
||||||
.literal("generate")
|
.literal("generate")
|
||||||
.argument(RegistryArgument.builder("structure",
|
.argument(RegistryArgument.builder("structure",
|
||||||
StructureCommandAddon::getStructureRegistry,
|
StructureCommandAddon::getStructureRegistry,
|
||||||
TypeKey.of(Structure.class)))
|
TypeKey.of(Structure.class)))
|
||||||
.argument(LongArgument.optional("seed", 0))
|
.argument(LongArgument.optional("seed", 0))
|
||||||
.argument(EnumArgument.optional(Rotation.class, "rotation", Rotation.NONE))
|
.argument(EnumArgument.optional(Rotation.class, "rotation", Rotation.NONE))
|
||||||
.handler(context -> {
|
.handler(context -> {
|
||||||
Structure structure = context.get("structure");
|
Structure structure = context.get("structure");
|
||||||
Entity sender = context.getSender().getEntity().orElseThrow();
|
Entity sender = context.getSender().getEntity().orElseThrow();
|
||||||
structure.generate(
|
structure.generate(
|
||||||
sender.position().toInt(),
|
sender.position().toInt(),
|
||||||
sender.world(),
|
sender.world(),
|
||||||
((Long) context.get("seed") == 0) ? new Random() : new Random(context.get("seed")),
|
((Long) context.get("seed") == 0) ? new Random() : new Random(context.get("seed")),
|
||||||
context.get("rotation")
|
context.get("rotation")
|
||||||
);
|
);
|
||||||
})
|
})
|
||||||
.permission("terra.structures.generate")
|
.permission("terra.structures.generate")
|
||||||
);
|
);
|
||||||
});
|
})))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+20
-17
@@ -9,30 +9,33 @@ package com.dfsek.terra.addons.biome;
|
|||||||
|
|
||||||
import com.dfsek.terra.addons.biome.holder.PaletteHolder;
|
import com.dfsek.terra.addons.biome.holder.PaletteHolder;
|
||||||
import com.dfsek.terra.addons.biome.holder.PaletteHolderLoader;
|
import com.dfsek.terra.addons.biome.holder.PaletteHolderLoader;
|
||||||
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
|
import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Do;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Get;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Init;
|
||||||
import com.dfsek.terra.api.Platform;
|
import com.dfsek.terra.api.Platform;
|
||||||
import com.dfsek.terra.api.addon.BaseAddon;
|
import com.dfsek.terra.api.addon.BaseAddon;
|
||||||
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
||||||
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
||||||
import com.dfsek.terra.api.inject.annotations.Inject;
|
import com.dfsek.terra.api.inject.annotations.Inject;
|
||||||
|
import com.dfsek.terra.api.util.function.monad.Monad;
|
||||||
|
|
||||||
|
|
||||||
public class BiomeAddon implements AddonInitializer {
|
public class BiomeAddon implements MonadAddonInitializer {
|
||||||
@Inject
|
|
||||||
private Platform platform;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private BaseAddon addon;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize() {
|
public Monad<?, Init<?>> initialize() {
|
||||||
platform.getEventManager()
|
return Do.with(
|
||||||
.getHandler(FunctionalEventHandler.class)
|
Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)),
|
||||||
.register(addon, ConfigPackPreLoadEvent.class)
|
Get.addon(),
|
||||||
.then(event -> {
|
Get.platform(),
|
||||||
event.getPack().registerConfigType(new BiomeConfigType(event.getPack()), addon.key("BIOME"), 1000);
|
((functionalEventHandler, base, platform) -> Init.ofPure(
|
||||||
event.getPack().applyLoader(PaletteHolder.class, new PaletteHolderLoader());
|
functionalEventHandler.register(base, ConfigPackPreLoadEvent.class)
|
||||||
})
|
.then(event -> {
|
||||||
.failThrough();
|
event.getPack().registerConfigType(new BiomeConfigType(event.getPack()),
|
||||||
|
base.key("BIOME"), 1000);
|
||||||
|
event.getPack().applyLoader(PaletteHolder.class, new PaletteHolderLoader());
|
||||||
|
})
|
||||||
|
.failThrough()
|
||||||
|
)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+29
-27
@@ -21,7 +21,10 @@ import com.dfsek.terra.addons.feature.distributor.config.XorDistributorTemplate;
|
|||||||
import com.dfsek.terra.addons.feature.distributor.config.YesDistributorTemplate;
|
import com.dfsek.terra.addons.feature.distributor.config.YesDistributorTemplate;
|
||||||
import com.dfsek.terra.addons.feature.distributor.util.Point;
|
import com.dfsek.terra.addons.feature.distributor.util.Point;
|
||||||
import com.dfsek.terra.addons.feature.distributor.util.PointTemplate;
|
import com.dfsek.terra.addons.feature.distributor.util.PointTemplate;
|
||||||
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
|
import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Do;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Get;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Init;
|
||||||
import com.dfsek.terra.api.Platform;
|
import com.dfsek.terra.api.Platform;
|
||||||
import com.dfsek.terra.api.addon.BaseAddon;
|
import com.dfsek.terra.api.addon.BaseAddon;
|
||||||
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
||||||
@@ -29,40 +32,39 @@ import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
|||||||
import com.dfsek.terra.api.inject.annotations.Inject;
|
import com.dfsek.terra.api.inject.annotations.Inject;
|
||||||
import com.dfsek.terra.api.registry.CheckedRegistry;
|
import com.dfsek.terra.api.registry.CheckedRegistry;
|
||||||
import com.dfsek.terra.api.structure.feature.Distributor;
|
import com.dfsek.terra.api.structure.feature.Distributor;
|
||||||
|
import com.dfsek.terra.api.util.function.monad.Monad;
|
||||||
import com.dfsek.terra.api.util.reflection.TypeKey;
|
import com.dfsek.terra.api.util.reflection.TypeKey;
|
||||||
|
|
||||||
|
|
||||||
public class DistributorAddon implements AddonInitializer {
|
public class DistributorAddon implements MonadAddonInitializer {
|
||||||
public static final TypeKey<Supplier<ObjectTemplate<Distributor>>> DISTRIBUTOR_TOKEN = new TypeKey<>() {
|
public static final TypeKey<Supplier<ObjectTemplate<Distributor>>> DISTRIBUTOR_TOKEN = new TypeKey<>() {
|
||||||
};
|
};
|
||||||
@Inject
|
|
||||||
private Platform platform;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private BaseAddon addon;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize() {
|
public Monad<?, Init<?>> initialize() {
|
||||||
platform.getEventManager()
|
return Do.with(
|
||||||
.getHandler(FunctionalEventHandler.class)
|
Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)),
|
||||||
.register(addon, ConfigPackPreLoadEvent.class)
|
Get.addon(),
|
||||||
.then(event -> {
|
((functionalEventHandler, base) -> Init.ofPure(
|
||||||
CheckedRegistry<Supplier<ObjectTemplate<Distributor>>> distributorRegistry = event
|
functionalEventHandler.register(base, ConfigPackPreLoadEvent.class)
|
||||||
.getPack()
|
.then(event -> {
|
||||||
.getOrCreateRegistry(DISTRIBUTOR_TOKEN);
|
CheckedRegistry<Supplier<ObjectTemplate<Distributor>>> distributorRegistry = event
|
||||||
|
.getPack()
|
||||||
|
.getOrCreateRegistry(DISTRIBUTOR_TOKEN);
|
||||||
|
|
||||||
distributorRegistry.register(addon.key("SAMPLER"), SamplerDistributorTemplate::new);
|
distributorRegistry.register(base.key("SAMPLER"), SamplerDistributorTemplate::new);
|
||||||
distributorRegistry.register(addon.key("POINTS"), PointSetDistributorTemplate::new);
|
distributorRegistry.register(base.key("POINTS"), PointSetDistributorTemplate::new);
|
||||||
distributorRegistry.register(addon.key("PADDED_GRID"), PaddedGridDistributorTemplate::new);
|
distributorRegistry.register(base.key("PADDED_GRID"), PaddedGridDistributorTemplate::new);
|
||||||
distributorRegistry.register(addon.key("AND"), AndDistributorTemplate::new);
|
distributorRegistry.register(base.key("AND"), AndDistributorTemplate::new);
|
||||||
distributorRegistry.register(addon.key("OR"), OrDistributorTemplate::new);
|
distributorRegistry.register(base.key("OR"), OrDistributorTemplate::new);
|
||||||
distributorRegistry.register(addon.key("XOR"), XorDistributorTemplate::new);
|
distributorRegistry.register(base.key("XOR"), XorDistributorTemplate::new);
|
||||||
distributorRegistry.register(addon.key("YES"), YesDistributorTemplate::new);
|
distributorRegistry.register(base.key("YES"), YesDistributorTemplate::new);
|
||||||
distributorRegistry.register(addon.key("NO"), NoDistributorTemplate::new);
|
distributorRegistry.register(base.key("NO"), NoDistributorTemplate::new);
|
||||||
|
|
||||||
event.getPack()
|
event.getPack()
|
||||||
.applyLoader(Point.class, PointTemplate::new);
|
.applyLoader(Point.class, PointTemplate::new);
|
||||||
})
|
})
|
||||||
.failThrough();
|
.failThrough()
|
||||||
|
)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+17
-14
@@ -7,27 +7,30 @@
|
|||||||
|
|
||||||
package com.dfsek.terra.addons.feature;
|
package com.dfsek.terra.addons.feature;
|
||||||
|
|
||||||
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
|
import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Do;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Get;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Init;
|
||||||
import com.dfsek.terra.api.Platform;
|
import com.dfsek.terra.api.Platform;
|
||||||
import com.dfsek.terra.api.addon.BaseAddon;
|
import com.dfsek.terra.api.addon.BaseAddon;
|
||||||
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
||||||
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
||||||
import com.dfsek.terra.api.inject.annotations.Inject;
|
import com.dfsek.terra.api.inject.annotations.Inject;
|
||||||
|
import com.dfsek.terra.api.util.function.monad.Monad;
|
||||||
|
|
||||||
|
|
||||||
public class FeatureAddon implements AddonInitializer {
|
public class FeatureAddon implements MonadAddonInitializer {
|
||||||
@Inject
|
|
||||||
private Platform platform;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private BaseAddon addon;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize() {
|
public Monad<?, Init<?>> initialize() {
|
||||||
platform.getEventManager()
|
return Do.with(
|
||||||
.getHandler(FunctionalEventHandler.class)
|
Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)),
|
||||||
.register(addon, ConfigPackPreLoadEvent.class)
|
Get.addon(),
|
||||||
.then(event -> event.getPack().registerConfigType(new FeatureConfigType(), addon.key("FEATURE"), 500))
|
((functionalEventHandler, base) -> Init.ofPure(
|
||||||
.failThrough();
|
functionalEventHandler.register(base, ConfigPackPreLoadEvent.class)
|
||||||
|
.then(event -> event.getPack()
|
||||||
|
.registerConfigType(new FeatureConfigType(), base.key("FEATURE"), 500))
|
||||||
|
.failThrough()))
|
||||||
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+18
-17
@@ -9,30 +9,31 @@ package com.dfsek.terra.addons.flora;
|
|||||||
|
|
||||||
import com.dfsek.terra.addons.flora.config.BlockLayerTemplate;
|
import com.dfsek.terra.addons.flora.config.BlockLayerTemplate;
|
||||||
import com.dfsek.terra.addons.flora.flora.gen.BlockLayer;
|
import com.dfsek.terra.addons.flora.flora.gen.BlockLayer;
|
||||||
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
|
import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Do;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Get;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Init;
|
||||||
import com.dfsek.terra.api.Platform;
|
import com.dfsek.terra.api.Platform;
|
||||||
import com.dfsek.terra.api.addon.BaseAddon;
|
import com.dfsek.terra.api.addon.BaseAddon;
|
||||||
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
||||||
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
||||||
import com.dfsek.terra.api.inject.annotations.Inject;
|
import com.dfsek.terra.api.inject.annotations.Inject;
|
||||||
|
import com.dfsek.terra.api.util.function.monad.Monad;
|
||||||
|
|
||||||
|
|
||||||
public class FloraAddon implements AddonInitializer {
|
public class FloraAddon implements MonadAddonInitializer {
|
||||||
@Inject
|
|
||||||
private Platform platform;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private BaseAddon addon;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize() {
|
public Monad<?, Init<?>> initialize() {
|
||||||
platform.getEventManager()
|
return Do.with(
|
||||||
.getHandler(FunctionalEventHandler.class)
|
Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)),
|
||||||
.register(addon, ConfigPackPreLoadEvent.class)
|
Get.addon(),
|
||||||
.then(event -> {
|
((functionalEventHandler, base) -> Init.ofPure(
|
||||||
event.getPack().registerConfigType(new FloraConfigType(), addon.key("FLORA"), 2);
|
functionalEventHandler.register(base, ConfigPackPreLoadEvent.class)
|
||||||
event.getPack().applyLoader(BlockLayer.class, BlockLayerTemplate::new);
|
.then(event -> {
|
||||||
})
|
event.getPack().registerConfigType(new FloraConfigType(), base.key("FLORA"), 2);
|
||||||
.failThrough();
|
event.getPack().applyLoader(BlockLayer.class, BlockLayerTemplate::new);
|
||||||
|
})
|
||||||
|
.failThrough()))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+41
-37
@@ -31,7 +31,10 @@ import com.dfsek.terra.addons.feature.locator.config.pattern.SingleBlockMatchPat
|
|||||||
import com.dfsek.terra.addons.feature.locator.config.pattern.SolidMatchPatternTemplate;
|
import com.dfsek.terra.addons.feature.locator.config.pattern.SolidMatchPatternTemplate;
|
||||||
import com.dfsek.terra.addons.feature.locator.config.pattern.XorPatternTemplate;
|
import com.dfsek.terra.addons.feature.locator.config.pattern.XorPatternTemplate;
|
||||||
import com.dfsek.terra.addons.feature.locator.patterns.Pattern;
|
import com.dfsek.terra.addons.feature.locator.patterns.Pattern;
|
||||||
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
|
import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Do;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Get;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Init;
|
||||||
import com.dfsek.terra.api.Platform;
|
import com.dfsek.terra.api.Platform;
|
||||||
import com.dfsek.terra.api.addon.BaseAddon;
|
import com.dfsek.terra.api.addon.BaseAddon;
|
||||||
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
||||||
@@ -39,56 +42,57 @@ import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
|||||||
import com.dfsek.terra.api.inject.annotations.Inject;
|
import com.dfsek.terra.api.inject.annotations.Inject;
|
||||||
import com.dfsek.terra.api.registry.CheckedRegistry;
|
import com.dfsek.terra.api.registry.CheckedRegistry;
|
||||||
import com.dfsek.terra.api.structure.feature.Locator;
|
import com.dfsek.terra.api.structure.feature.Locator;
|
||||||
|
import com.dfsek.terra.api.util.function.monad.Monad;
|
||||||
import com.dfsek.terra.api.util.reflection.TypeKey;
|
import com.dfsek.terra.api.util.reflection.TypeKey;
|
||||||
|
|
||||||
|
|
||||||
public class LocatorAddon implements AddonInitializer {
|
public class LocatorAddon implements MonadAddonInitializer {
|
||||||
|
|
||||||
public static final TypeKey<Supplier<ObjectTemplate<Locator>>> LOCATOR_TOKEN = new TypeKey<>() {
|
public static final TypeKey<Supplier<ObjectTemplate<Locator>>> LOCATOR_TOKEN = new TypeKey<>() {
|
||||||
};
|
};
|
||||||
public static final TypeKey<Supplier<ObjectTemplate<Pattern>>> PATTERN_TOKEN = new TypeKey<>() {
|
public static final TypeKey<Supplier<ObjectTemplate<Pattern>>> PATTERN_TOKEN = new TypeKey<>() {
|
||||||
};
|
};
|
||||||
@Inject
|
|
||||||
private Platform platform;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private BaseAddon addon;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize() {
|
public Monad<?, Init<?>> initialize() {
|
||||||
platform.getEventManager()
|
return Do.with(
|
||||||
.getHandler(FunctionalEventHandler.class)
|
Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)),
|
||||||
.register(addon, ConfigPackPreLoadEvent.class)
|
Get.addon(),
|
||||||
.then(event -> {
|
Get.platform(),
|
||||||
CheckedRegistry<Supplier<ObjectTemplate<Locator>>> locatorRegistry = event.getPack().getOrCreateRegistry(LOCATOR_TOKEN);
|
((functionalEventHandler, base, platform) -> Init.ofPure(
|
||||||
locatorRegistry.register(addon.key("SURFACE"), SurfaceLocatorTemplate::new);
|
functionalEventHandler.register(base, ConfigPackPreLoadEvent.class)
|
||||||
locatorRegistry.register(addon.key("TOP"), TopLocatorTemplate::new);
|
.then(event -> {
|
||||||
|
CheckedRegistry<Supplier<ObjectTemplate<Locator>>> locatorRegistry = event.getPack().getOrCreateRegistry(LOCATOR_TOKEN);
|
||||||
|
locatorRegistry.register(base.key("SURFACE"), SurfaceLocatorTemplate::new);
|
||||||
|
locatorRegistry.register(base.key("TOP"), TopLocatorTemplate::new);
|
||||||
|
|
||||||
locatorRegistry.register(addon.key("RANDOM"), RandomLocatorTemplate::new);
|
locatorRegistry.register(base.key("RANDOM"), RandomLocatorTemplate::new);
|
||||||
locatorRegistry.register(addon.key("GAUSSIAN_RANDOM"), GaussianRandomLocatorTemplate::new);
|
locatorRegistry.register(base.key("GAUSSIAN_RANDOM"), GaussianRandomLocatorTemplate::new);
|
||||||
|
|
||||||
locatorRegistry.register(addon.key("PATTERN"), PatternLocatorTemplate::new);
|
locatorRegistry.register(base.key("PATTERN"), PatternLocatorTemplate::new);
|
||||||
locatorRegistry.register(addon.key("ADJACENT_PATTERN"), AdjacentPatternLocatorTemplate::new);
|
locatorRegistry.register(base.key("ADJACENT_PATTERN"), AdjacentPatternLocatorTemplate::new);
|
||||||
|
|
||||||
locatorRegistry.register(addon.key("SAMPLER"), SamplerLocatorTemplate::new);
|
locatorRegistry.register(base.key("SAMPLER"), SamplerLocatorTemplate::new);
|
||||||
locatorRegistry.register(addon.key("SAMPLER_3D"), Sampler3DLocatorTemplate::new);
|
locatorRegistry.register(base.key("SAMPLER_3D"), Sampler3DLocatorTemplate::new);
|
||||||
|
|
||||||
locatorRegistry.register(addon.key("AND"), AndLocatorTemplate::new);
|
locatorRegistry.register(base.key("AND"), AndLocatorTemplate::new);
|
||||||
locatorRegistry.register(addon.key("OR"), OrLocatorTemplate::new);
|
locatorRegistry.register(base.key("OR"), OrLocatorTemplate::new);
|
||||||
locatorRegistry.register(addon.key("XOR"), XorLocatorTemplate::new);
|
locatorRegistry.register(base.key("XOR"), XorLocatorTemplate::new);
|
||||||
})
|
})
|
||||||
.then(event -> {
|
.then(event -> {
|
||||||
CheckedRegistry<Supplier<ObjectTemplate<Pattern>>> patternRegistry = event.getPack().getOrCreateRegistry(PATTERN_TOKEN);
|
CheckedRegistry<Supplier<ObjectTemplate<Pattern>>> patternRegistry = event.getPack().getOrCreateRegistry(PATTERN_TOKEN);
|
||||||
patternRegistry.register(addon.key("MATCH_AIR"), AirMatchPatternTemplate::new);
|
patternRegistry.register(base.key("MATCH_AIR"), AirMatchPatternTemplate::new);
|
||||||
patternRegistry.register(addon.key("MATCH_SOLID"), SolidMatchPatternTemplate::new);
|
patternRegistry.register(base.key("MATCH_SOLID"), SolidMatchPatternTemplate::new);
|
||||||
patternRegistry.register(addon.key("MATCH"), SingleBlockMatchPatternTemplate::new);
|
patternRegistry.register(base.key("MATCH"), SingleBlockMatchPatternTemplate::new);
|
||||||
patternRegistry.register(addon.key("MATCH_SET"), BlockSetMatchPatternTemplate::new);
|
patternRegistry.register(base.key("MATCH_SET"), BlockSetMatchPatternTemplate::new);
|
||||||
|
|
||||||
|
patternRegistry.register(base.key("AND"), AndPatternTemplate::new);
|
||||||
|
patternRegistry.register(base.key("OR"), OrPatternTemplate::new);
|
||||||
|
patternRegistry.register(base.key("XOR"), XorPatternTemplate::new);
|
||||||
|
patternRegistry.register(base.key("NOT"), NotPatternTemplate::new);
|
||||||
|
})
|
||||||
|
.failThrough()))
|
||||||
|
);
|
||||||
|
|
||||||
patternRegistry.register(addon.key("AND"), AndPatternTemplate::new);
|
|
||||||
patternRegistry.register(addon.key("OR"), OrPatternTemplate::new);
|
|
||||||
patternRegistry.register(addon.key("XOR"), XorPatternTemplate::new);
|
|
||||||
patternRegistry.register(addon.key("NOT"), NotPatternTemplate::new);
|
|
||||||
})
|
|
||||||
.failThrough();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+68
-62
@@ -13,7 +13,10 @@ import java.util.LinkedHashMap;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
|
import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Do;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Get;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Init;
|
||||||
import com.dfsek.terra.addons.noise.config.DimensionApplicableNoiseSampler;
|
import com.dfsek.terra.addons.noise.config.DimensionApplicableNoiseSampler;
|
||||||
import com.dfsek.terra.addons.noise.config.templates.BinaryArithmeticTemplate;
|
import com.dfsek.terra.addons.noise.config.templates.BinaryArithmeticTemplate;
|
||||||
import com.dfsek.terra.addons.noise.config.templates.DomainWarpTemplate;
|
import com.dfsek.terra.addons.noise.config.templates.DomainWarpTemplate;
|
||||||
@@ -58,90 +61,93 @@ import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
|||||||
import com.dfsek.terra.api.inject.annotations.Inject;
|
import com.dfsek.terra.api.inject.annotations.Inject;
|
||||||
import com.dfsek.terra.api.noise.NoiseSampler;
|
import com.dfsek.terra.api.noise.NoiseSampler;
|
||||||
import com.dfsek.terra.api.registry.CheckedRegistry;
|
import com.dfsek.terra.api.registry.CheckedRegistry;
|
||||||
|
import com.dfsek.terra.api.util.function.monad.Monad;
|
||||||
import com.dfsek.terra.api.util.reflection.TypeKey;
|
import com.dfsek.terra.api.util.reflection.TypeKey;
|
||||||
|
import com.dfsek.terra.api.world.biome.Biome;
|
||||||
|
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
|
||||||
|
|
||||||
|
|
||||||
public class NoiseAddon implements AddonInitializer {
|
public class NoiseAddon implements MonadAddonInitializer {
|
||||||
public static final TypeKey<Supplier<ObjectTemplate<NoiseSampler>>> NOISE_SAMPLER_TOKEN = new TypeKey<>() {
|
public static final TypeKey<Supplier<ObjectTemplate<NoiseSampler>>> NOISE_SAMPLER_TOKEN = new TypeKey<>() {
|
||||||
};
|
};
|
||||||
@Inject
|
|
||||||
private Platform plugin;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private BaseAddon addon;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize() {
|
public Monad<?, Init<?>> initialize() {
|
||||||
plugin.getEventManager()
|
return Do.with(
|
||||||
.getHandler(FunctionalEventHandler.class)
|
Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)),
|
||||||
.register(addon, ConfigPackPreLoadEvent.class)
|
Get.addon(),
|
||||||
.then(event -> {
|
Get.platform(),
|
||||||
CheckedRegistry<Supplier<ObjectTemplate<NoiseSampler>>> noiseRegistry = event.getPack().getOrCreateRegistry(
|
((functionalEventHandler, base, platform) -> Init.ofPure(
|
||||||
NOISE_SAMPLER_TOKEN);
|
functionalEventHandler.register(base, ConfigPackPreLoadEvent.class)
|
||||||
event.getPack()
|
.then(event -> {
|
||||||
.applyLoader(CellularSampler.DistanceFunction.class,
|
CheckedRegistry<Supplier<ObjectTemplate<NoiseSampler>>> noiseRegistry = event.getPack().getOrCreateRegistry(
|
||||||
(type, o, loader, depthTracker) -> CellularSampler.DistanceFunction.valueOf((String) o))
|
NOISE_SAMPLER_TOKEN);
|
||||||
.applyLoader(CellularSampler.ReturnType.class,
|
event.getPack()
|
||||||
(type, o, loader, depthTracker) -> CellularSampler.ReturnType.valueOf((String) o))
|
.applyLoader(CellularSampler.DistanceFunction.class,
|
||||||
.applyLoader(DimensionApplicableNoiseSampler.class, DimensionApplicableNoiseSampler::new)
|
(type, o, loader, depthTracker) -> CellularSampler.DistanceFunction.valueOf((String) o))
|
||||||
.applyLoader(FunctionTemplate.class, FunctionTemplate::new);
|
.applyLoader(CellularSampler.ReturnType.class,
|
||||||
|
(type, o, loader, depthTracker) -> CellularSampler.ReturnType.valueOf((String) o))
|
||||||
|
.applyLoader(DimensionApplicableNoiseSampler.class, DimensionApplicableNoiseSampler::new)
|
||||||
|
.applyLoader(FunctionTemplate.class, FunctionTemplate::new);
|
||||||
|
|
||||||
noiseRegistry.register(addon.key("LINEAR"), LinearNormalizerTemplate::new);
|
noiseRegistry.register(base.key("LINEAR"), LinearNormalizerTemplate::new);
|
||||||
noiseRegistry.register(addon.key("NORMAL"), NormalNormalizerTemplate::new);
|
noiseRegistry.register(base.key("NORMAL"), NormalNormalizerTemplate::new);
|
||||||
noiseRegistry.register(addon.key("CLAMP"), ClampNormalizerTemplate::new);
|
noiseRegistry.register(base.key("CLAMP"), ClampNormalizerTemplate::new);
|
||||||
noiseRegistry.register(addon.key("PROBABILITY"), ProbabilityNormalizerTemplate::new);
|
noiseRegistry.register(base.key("PROBABILITY"), ProbabilityNormalizerTemplate::new);
|
||||||
noiseRegistry.register(addon.key("SCALE"), ScaleNormalizerTemplate::new);
|
noiseRegistry.register(base.key("SCALE"), ScaleNormalizerTemplate::new);
|
||||||
noiseRegistry.register(addon.key("POSTERIZATION"), PosterizationNormalizerTemplate::new);
|
noiseRegistry.register(base.key("POSTERIZATION"), PosterizationNormalizerTemplate::new);
|
||||||
|
|
||||||
noiseRegistry.register(addon.key("IMAGE"), ImageSamplerTemplate::new);
|
noiseRegistry.register(base.key("IMAGE"), ImageSamplerTemplate::new);
|
||||||
|
|
||||||
noiseRegistry.register(addon.key("DOMAIN_WARP"), DomainWarpTemplate::new);
|
noiseRegistry.register(base.key("DOMAIN_WARP"), DomainWarpTemplate::new);
|
||||||
|
|
||||||
noiseRegistry.register(addon.key("FBM"), BrownianMotionTemplate::new);
|
noiseRegistry.register(base.key("FBM"), BrownianMotionTemplate::new);
|
||||||
noiseRegistry.register(addon.key("PING_PONG"), PingPongTemplate::new);
|
noiseRegistry.register(base.key("PING_PONG"), PingPongTemplate::new);
|
||||||
noiseRegistry.register(addon.key("RIDGED"), RidgedFractalTemplate::new);
|
noiseRegistry.register(base.key("RIDGED"), RidgedFractalTemplate::new);
|
||||||
|
|
||||||
noiseRegistry.register(addon.key("OPEN_SIMPLEX_2"), () -> new SimpleNoiseTemplate(OpenSimplex2Sampler::new));
|
noiseRegistry.register(base.key("OPEN_SIMPLEX_2"), () -> new SimpleNoiseTemplate(OpenSimplex2Sampler::new));
|
||||||
noiseRegistry.register(addon.key("OPEN_SIMPLEX_2S"), () -> new SimpleNoiseTemplate(OpenSimplex2SSampler::new));
|
noiseRegistry.register(base.key("OPEN_SIMPLEX_2S"), () -> new SimpleNoiseTemplate(OpenSimplex2SSampler::new));
|
||||||
noiseRegistry.register(addon.key("PERLIN"), () -> new SimpleNoiseTemplate(PerlinSampler::new));
|
noiseRegistry.register(base.key("PERLIN"), () -> new SimpleNoiseTemplate(PerlinSampler::new));
|
||||||
noiseRegistry.register(addon.key("SIMPLEX"), () -> new SimpleNoiseTemplate(SimplexSampler::new));
|
noiseRegistry.register(base.key("SIMPLEX"), () -> new SimpleNoiseTemplate(SimplexSampler::new));
|
||||||
noiseRegistry.register(addon.key("GABOR"), GaborNoiseTemplate::new);
|
noiseRegistry.register(base.key("GABOR"), GaborNoiseTemplate::new);
|
||||||
|
|
||||||
|
|
||||||
noiseRegistry.register(addon.key("VALUE"), () -> new SimpleNoiseTemplate(ValueSampler::new));
|
noiseRegistry.register(base.key("VALUE"), () -> new SimpleNoiseTemplate(ValueSampler::new));
|
||||||
noiseRegistry.register(addon.key("VALUE_CUBIC"), () -> new SimpleNoiseTemplate(ValueCubicSampler::new));
|
noiseRegistry.register(base.key("VALUE_CUBIC"), () -> new SimpleNoiseTemplate(ValueCubicSampler::new));
|
||||||
|
|
||||||
noiseRegistry.register(addon.key("CELLULAR"), CellularNoiseTemplate::new);
|
noiseRegistry.register(base.key("CELLULAR"), CellularNoiseTemplate::new);
|
||||||
|
|
||||||
noiseRegistry.register(addon.key("WHITE_NOISE"), () -> new SimpleNoiseTemplate(WhiteNoiseSampler::new));
|
noiseRegistry.register(base.key("WHITE_NOISE"), () -> new SimpleNoiseTemplate(WhiteNoiseSampler::new));
|
||||||
noiseRegistry.register(addon.key("POSITIVE_WHITE_NOISE"), () -> new SimpleNoiseTemplate(PositiveWhiteNoiseSampler::new));
|
noiseRegistry.register(base.key("POSITIVE_WHITE_NOISE"), () -> new SimpleNoiseTemplate(PositiveWhiteNoiseSampler::new));
|
||||||
noiseRegistry.register(addon.key("GAUSSIAN"), () -> new SimpleNoiseTemplate(GaussianNoiseSampler::new));
|
noiseRegistry.register(base.key("GAUSSIAN"), () -> new SimpleNoiseTemplate(GaussianNoiseSampler::new));
|
||||||
|
|
||||||
noiseRegistry.register(addon.key("CONSTANT"), ConstantNoiseTemplate::new);
|
noiseRegistry.register(base.key("CONSTANT"), ConstantNoiseTemplate::new);
|
||||||
|
|
||||||
noiseRegistry.register(addon.key("KERNEL"), KernelTemplate::new);
|
noiseRegistry.register(base.key("KERNEL"), KernelTemplate::new);
|
||||||
|
|
||||||
noiseRegistry.register(addon.key("LINEAR_HEIGHTMAP"), LinearHeightmapSamplerTemplate::new);
|
noiseRegistry.register(base.key("LINEAR_HEIGHTMAP"), LinearHeightmapSamplerTemplate::new);
|
||||||
|
|
||||||
noiseRegistry.register(addon.key("ADD"), () -> new BinaryArithmeticTemplate<>(AdditionSampler::new));
|
noiseRegistry.register(base.key("ADD"), () -> new BinaryArithmeticTemplate<>(AdditionSampler::new));
|
||||||
noiseRegistry.register(addon.key("SUB"), () -> new BinaryArithmeticTemplate<>(SubtractionSampler::new));
|
noiseRegistry.register(base.key("SUB"), () -> new BinaryArithmeticTemplate<>(SubtractionSampler::new));
|
||||||
noiseRegistry.register(addon.key("MUL"), () -> new BinaryArithmeticTemplate<>(MultiplicationSampler::new));
|
noiseRegistry.register(base.key("MUL"), () -> new BinaryArithmeticTemplate<>(MultiplicationSampler::new));
|
||||||
noiseRegistry.register(addon.key("DIV"), () -> new BinaryArithmeticTemplate<>(DivisionSampler::new));
|
noiseRegistry.register(base.key("DIV"), () -> new BinaryArithmeticTemplate<>(DivisionSampler::new));
|
||||||
noiseRegistry.register(addon.key("MAX"), () -> new BinaryArithmeticTemplate<>(MaxSampler::new));
|
noiseRegistry.register(base.key("MAX"), () -> new BinaryArithmeticTemplate<>(MaxSampler::new));
|
||||||
noiseRegistry.register(addon.key("MIN"), () -> new BinaryArithmeticTemplate<>(MinSampler::new));
|
noiseRegistry.register(base.key("MIN"), () -> new BinaryArithmeticTemplate<>(MinSampler::new));
|
||||||
|
|
||||||
|
|
||||||
Map<String, DimensionApplicableNoiseSampler> packSamplers = new LinkedHashMap<>();
|
Map<String, DimensionApplicableNoiseSampler> packSamplers = new LinkedHashMap<>();
|
||||||
Map<String, FunctionTemplate> packFunctions = new LinkedHashMap<>();
|
Map<String, FunctionTemplate> packFunctions = new LinkedHashMap<>();
|
||||||
noiseRegistry.register(addon.key("EXPRESSION"), () -> new ExpressionFunctionTemplate(packSamplers, packFunctions));
|
noiseRegistry.register(base.key("EXPRESSION"), () -> new ExpressionFunctionTemplate(packSamplers, packFunctions));
|
||||||
|
|
||||||
|
|
||||||
NoiseConfigPackTemplate template = event.loadTemplate(new NoiseConfigPackTemplate());
|
NoiseConfigPackTemplate template = event.loadTemplate(new NoiseConfigPackTemplate());
|
||||||
packSamplers.putAll(template.getSamplers());
|
packSamplers.putAll(template.getSamplers());
|
||||||
packFunctions.putAll(template.getFunctions());
|
packFunctions.putAll(template.getFunctions());
|
||||||
event.getPack().getContext().put(template);
|
event.getPack().getContext().put(template);
|
||||||
})
|
})
|
||||||
.priority(50)
|
.priority(50)
|
||||||
.failThrough();
|
.failThrough()))
|
||||||
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,27 +7,28 @@
|
|||||||
|
|
||||||
package com.dfsek.terra.addons.ore;
|
package com.dfsek.terra.addons.ore;
|
||||||
|
|
||||||
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
|
import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer;
|
||||||
import com.dfsek.terra.api.Platform;
|
import com.dfsek.terra.addons.manifest.api.monad.Do;
|
||||||
import com.dfsek.terra.api.addon.BaseAddon;
|
import com.dfsek.terra.addons.manifest.api.monad.Get;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Init;
|
||||||
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
||||||
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
||||||
import com.dfsek.terra.api.inject.annotations.Inject;
|
import com.dfsek.terra.api.util.function.monad.Monad;
|
||||||
|
|
||||||
|
|
||||||
public class OreAddon implements AddonInitializer {
|
public class OreAddon implements MonadAddonInitializer {
|
||||||
@Inject
|
|
||||||
private Platform platform;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private BaseAddon addon;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize() {
|
public Monad<?, Init<?>> initialize() {
|
||||||
platform.getEventManager()
|
return Do.with(
|
||||||
.getHandler(FunctionalEventHandler.class)
|
Get.eventManager().map(manager -> manager.getHandler(FunctionalEventHandler.class)),
|
||||||
.register(addon, ConfigPackPreLoadEvent.class)
|
Get.addon(),
|
||||||
.then(event -> event.getPack().registerConfigType(new OreConfigType(), addon.key("ORE"), 1))
|
(eventHandler, addon) -> Init
|
||||||
.failThrough();
|
.ofPure(eventHandler
|
||||||
|
.register(addon, ConfigPackPreLoadEvent.class)
|
||||||
|
.then(event -> event
|
||||||
|
.getPack()
|
||||||
|
.registerConfigType(new OreConfigType(), addon.key("ORE"), 1))
|
||||||
|
.failThrough())
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+26
-17
@@ -7,7 +7,12 @@
|
|||||||
|
|
||||||
package com.dfsek.terra.addons.palette;
|
package com.dfsek.terra.addons.palette;
|
||||||
|
|
||||||
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
|
import com.dfsek.tectonic.api.config.template.object.ObjectTemplate;
|
||||||
|
|
||||||
|
import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Do;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Get;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Init;
|
||||||
import com.dfsek.terra.addons.palette.palette.PaletteLayerHolder;
|
import com.dfsek.terra.addons.palette.palette.PaletteLayerHolder;
|
||||||
import com.dfsek.terra.addons.palette.palette.PaletteLayerLoader;
|
import com.dfsek.terra.addons.palette.palette.PaletteLayerLoader;
|
||||||
import com.dfsek.terra.api.Platform;
|
import com.dfsek.terra.api.Platform;
|
||||||
@@ -15,24 +20,28 @@ import com.dfsek.terra.api.addon.BaseAddon;
|
|||||||
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
||||||
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
||||||
import com.dfsek.terra.api.inject.annotations.Inject;
|
import com.dfsek.terra.api.inject.annotations.Inject;
|
||||||
|
import com.dfsek.terra.api.registry.CheckedRegistry;
|
||||||
|
import com.dfsek.terra.api.util.function.monad.Monad;
|
||||||
|
import com.dfsek.terra.api.world.biome.Biome;
|
||||||
|
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
|
||||||
|
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
|
|
||||||
public class PaletteAddon implements AddonInitializer {
|
public class PaletteAddon implements MonadAddonInitializer {
|
||||||
@Inject
|
|
||||||
private Platform platform;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private BaseAddon addon;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize() {
|
public Monad<?, Init<?>> initialize() {
|
||||||
platform.getEventManager()
|
return Do.with(
|
||||||
.getHandler(FunctionalEventHandler.class)
|
Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)),
|
||||||
.register(addon, ConfigPackPreLoadEvent.class)
|
Get.addon(),
|
||||||
.then(event -> {
|
Get.platform(),
|
||||||
event.getPack().registerConfigType(new PaletteConfigType(platform), addon.key("PALETTE"), 2);
|
((handler, base, platform) -> Init.ofPure(
|
||||||
event.getPack().applyLoader(PaletteLayerHolder.class, PaletteLayerLoader::new);
|
handler.register(base, ConfigPackPreLoadEvent.class)
|
||||||
})
|
.then(event -> {
|
||||||
.failThrough();
|
event.getPack().registerConfigType(new PaletteConfigType(platform), base.key("PALETTE"), 2);
|
||||||
|
event.getPack().applyLoader(PaletteLayerHolder.class, PaletteLayerLoader::new);
|
||||||
|
})
|
||||||
|
.failThrough()))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+16
-8
@@ -7,15 +7,19 @@
|
|||||||
|
|
||||||
package com.dfsek.terra.addons.structure;
|
package com.dfsek.terra.addons.structure;
|
||||||
|
|
||||||
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
|
import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Do;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Get;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Init;
|
||||||
import com.dfsek.terra.api.Platform;
|
import com.dfsek.terra.api.Platform;
|
||||||
import com.dfsek.terra.api.addon.BaseAddon;
|
import com.dfsek.terra.api.addon.BaseAddon;
|
||||||
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
||||||
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
||||||
import com.dfsek.terra.api.inject.annotations.Inject;
|
import com.dfsek.terra.api.inject.annotations.Inject;
|
||||||
|
import com.dfsek.terra.api.util.function.monad.Monad;
|
||||||
|
|
||||||
|
|
||||||
public class StructureAddon implements AddonInitializer {
|
public class StructureAddon implements MonadAddonInitializer {
|
||||||
@Inject
|
@Inject
|
||||||
private Platform platform;
|
private Platform platform;
|
||||||
|
|
||||||
@@ -23,11 +27,15 @@ public class StructureAddon implements AddonInitializer {
|
|||||||
private BaseAddon addon;
|
private BaseAddon addon;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize() {
|
public Monad<?, Init<?>> initialize() {
|
||||||
platform.getEventManager()
|
return Do.with(
|
||||||
.getHandler(FunctionalEventHandler.class)
|
Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)),
|
||||||
.register(addon, ConfigPackPreLoadEvent.class)
|
Get.addon(),
|
||||||
.then(event -> event.getPack().registerConfigType(new StructureConfigType(), addon.key("STRUCTURE"), 2))
|
Get.platform(),
|
||||||
.failThrough();
|
((handler, base, platform) -> Init.ofPure(
|
||||||
|
handler.register(addon, ConfigPackPreLoadEvent.class)
|
||||||
|
.then(event -> event.getPack().registerConfigType(new StructureConfigType(), addon.key("STRUCTURE"), 2))
|
||||||
|
.failThrough()))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+46
-41
@@ -20,7 +20,10 @@ import java.util.function.Supplier;
|
|||||||
|
|
||||||
import com.dfsek.terra.addons.generation.feature.config.BiomeFeatures;
|
import com.dfsek.terra.addons.generation.feature.config.BiomeFeatures;
|
||||||
import com.dfsek.terra.addons.generation.feature.config.FeatureStageTemplate;
|
import com.dfsek.terra.addons.generation.feature.config.FeatureStageTemplate;
|
||||||
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
|
import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Do;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Get;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Init;
|
||||||
import com.dfsek.terra.api.Platform;
|
import com.dfsek.terra.api.Platform;
|
||||||
import com.dfsek.terra.api.addon.BaseAddon;
|
import com.dfsek.terra.api.addon.BaseAddon;
|
||||||
import com.dfsek.terra.api.config.meta.Meta;
|
import com.dfsek.terra.api.config.meta.Meta;
|
||||||
@@ -31,65 +34,67 @@ import com.dfsek.terra.api.inject.annotations.Inject;
|
|||||||
import com.dfsek.terra.api.properties.Context;
|
import com.dfsek.terra.api.properties.Context;
|
||||||
import com.dfsek.terra.api.properties.PropertyKey;
|
import com.dfsek.terra.api.properties.PropertyKey;
|
||||||
import com.dfsek.terra.api.structure.feature.Feature;
|
import com.dfsek.terra.api.structure.feature.Feature;
|
||||||
|
import com.dfsek.terra.api.util.function.monad.Monad;
|
||||||
|
import com.dfsek.terra.api.util.generic.Construct;
|
||||||
import com.dfsek.terra.api.util.reflection.TypeKey;
|
import com.dfsek.terra.api.util.reflection.TypeKey;
|
||||||
import com.dfsek.terra.api.world.biome.Biome;
|
import com.dfsek.terra.api.world.biome.Biome;
|
||||||
import com.dfsek.terra.api.world.chunk.generation.stage.GenerationStage;
|
import com.dfsek.terra.api.world.chunk.generation.stage.GenerationStage;
|
||||||
|
import com.dfsek.terra.api.world.chunk.generation.util.provider.ChunkGeneratorProvider;
|
||||||
|
|
||||||
|
|
||||||
public class FeatureGenerationAddon implements AddonInitializer {
|
public class FeatureGenerationAddon implements MonadAddonInitializer {
|
||||||
public static final TypeKey<Supplier<ObjectTemplate<GenerationStage>>> STAGE_TYPE_KEY = new TypeKey<>() {
|
public static final TypeKey<Supplier<ObjectTemplate<GenerationStage>>> STAGE_TYPE_KEY = new TypeKey<>() {
|
||||||
};
|
};
|
||||||
|
|
||||||
public static final TypeKey<@Meta List<@Meta Feature>> FEATURE_LIST_TYPE_KEY = new TypeKey<>() {
|
public static final TypeKey<@Meta List<@Meta Feature>> FEATURE_LIST_TYPE_KEY = new TypeKey<>() {
|
||||||
};
|
};
|
||||||
@Inject
|
|
||||||
private Platform platform;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private BaseAddon addon;
|
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
@Override
|
@Override
|
||||||
public void initialize() {
|
public Monad<?, Init<?>> initialize() {
|
||||||
PropertyKey<BiomeFeatures> biomeFeaturesKey = Context.create(BiomeFeatures.class);
|
PropertyKey<BiomeFeatures> biomeFeaturesKey = Context.create(BiomeFeatures.class);
|
||||||
platform.getEventManager()
|
return Do.with(
|
||||||
.getHandler(FunctionalEventHandler.class)
|
Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)),
|
||||||
.register(addon, ConfigPackPreLoadEvent.class)
|
Get.addon(),
|
||||||
.then(event -> event.getPack()
|
Get.platform(),
|
||||||
.getOrCreateRegistry(STAGE_TYPE_KEY)
|
((handler, base, platform) -> Init.ofPure(Construct.construct(() -> {
|
||||||
.register(addon.key("FEATURE"), () -> new FeatureStageTemplate(platform, biomeFeaturesKey)))
|
handler.register(base, ConfigPackPreLoadEvent.class)
|
||||||
.failThrough();
|
.then(event -> event.getPack()
|
||||||
|
.getOrCreateRegistry(STAGE_TYPE_KEY)
|
||||||
|
.register(base.key("FEATURE"), () -> new FeatureStageTemplate(platform, biomeFeaturesKey)))
|
||||||
|
.failThrough();
|
||||||
|
return handler.register(base, ConfigurationLoadEvent.class)
|
||||||
|
.then(event -> {
|
||||||
|
if(event.is(Biome.class)) {
|
||||||
|
DynamicTemplate.Builder templateBuilder = DynamicTemplate.builder();
|
||||||
|
|
||||||
platform.getEventManager()
|
List<FeatureGenerationStage> featureGenerationStages = new ArrayList<>();
|
||||||
.getHandler(FunctionalEventHandler.class)
|
event.getPack().getStages().forEach(stage -> {
|
||||||
.register(addon, ConfigurationLoadEvent.class)
|
if(stage instanceof FeatureGenerationStage featureGenerationStage) {
|
||||||
.then(event -> {
|
featureGenerationStages.add(featureGenerationStage);
|
||||||
if(event.is(Biome.class)) {
|
templateBuilder
|
||||||
DynamicTemplate.Builder templateBuilder = DynamicTemplate.builder();
|
.value(featureGenerationStage.getID(),
|
||||||
|
DynamicValue
|
||||||
|
.builder("features." + featureGenerationStage.getID(), List.class)
|
||||||
|
.annotatedType(FEATURE_LIST_TYPE_KEY.getAnnotatedType())
|
||||||
|
.setDefault(Collections.emptyList())
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
List<FeatureGenerationStage> featureGenerationStages = new ArrayList<>();
|
DynamicTemplate template = event.load(templateBuilder.build());
|
||||||
event.getPack().getStages().forEach(stage -> {
|
|
||||||
if(stage instanceof FeatureGenerationStage featureGenerationStage) {
|
|
||||||
featureGenerationStages.add(featureGenerationStage);
|
|
||||||
templateBuilder
|
|
||||||
.value(featureGenerationStage.getID(),
|
|
||||||
DynamicValue
|
|
||||||
.builder("features." + featureGenerationStage.getID(), List.class)
|
|
||||||
.annotatedType(FEATURE_LIST_TYPE_KEY.getAnnotatedType())
|
|
||||||
.setDefault(Collections.emptyList())
|
|
||||||
.build());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
DynamicTemplate template = event.load(templateBuilder.build());
|
Map<FeatureGenerationStage, List<Feature>> features = new HashMap<>();
|
||||||
|
|
||||||
Map<FeatureGenerationStage, List<Feature>> features = new HashMap<>();
|
featureGenerationStages.forEach(
|
||||||
|
stage -> features.put(stage, template.get(stage.getID(), List.class)));
|
||||||
|
|
||||||
featureGenerationStages.forEach(stage -> features.put(stage, template.get(stage.getID(), List.class)));
|
event.getLoadedObject(Biome.class).getContext().put(biomeFeaturesKey,
|
||||||
|
new BiomeFeatures(features));
|
||||||
event.getLoadedObject(Biome.class).getContext().put(biomeFeaturesKey, new BiomeFeatures(features));
|
}
|
||||||
}
|
})
|
||||||
})
|
.failThrough();
|
||||||
.failThrough();
|
}))));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+27
-30
@@ -1,43 +1,40 @@
|
|||||||
package com.dfsek.terra.addons.generation.structure;
|
package com.dfsek.terra.addons.generation.structure;
|
||||||
|
|
||||||
import com.dfsek.terra.addons.generation.structure.config.BiomeStructuresTemplate;
|
import com.dfsek.terra.addons.generation.structure.config.BiomeStructuresTemplate;
|
||||||
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
|
import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer;
|
||||||
import com.dfsek.terra.api.Platform;
|
import com.dfsek.terra.addons.manifest.api.monad.Do;
|
||||||
import com.dfsek.terra.api.addon.BaseAddon;
|
import com.dfsek.terra.addons.manifest.api.monad.Get;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Init;
|
||||||
import com.dfsek.terra.api.event.events.config.ConfigurationLoadEvent;
|
import com.dfsek.terra.api.event.events.config.ConfigurationLoadEvent;
|
||||||
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
||||||
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
||||||
import com.dfsek.terra.api.inject.annotations.Inject;
|
import com.dfsek.terra.api.util.function.monad.Monad;
|
||||||
|
import com.dfsek.terra.api.util.generic.Construct;
|
||||||
import com.dfsek.terra.api.world.biome.Biome;
|
import com.dfsek.terra.api.world.biome.Biome;
|
||||||
import com.dfsek.terra.api.world.chunk.generation.util.provider.GenerationStageProvider;
|
import com.dfsek.terra.api.world.chunk.generation.util.provider.GenerationStageProvider;
|
||||||
|
|
||||||
|
|
||||||
public class StructureGenerationAddon implements AddonInitializer {
|
public class StructureGenerationAddon implements MonadAddonInitializer {
|
||||||
@Inject
|
|
||||||
private Platform platform;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private BaseAddon addon;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize() {
|
public Monad<?, Init<?>> initialize() {
|
||||||
platform.getEventManager()
|
return Do.with(
|
||||||
.getHandler(FunctionalEventHandler.class)
|
Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)),
|
||||||
.register(addon, ConfigPackPreLoadEvent.class)
|
Get.addon(),
|
||||||
.then(event -> event.getPack()
|
Get.platform(),
|
||||||
.getOrCreateRegistry(GenerationStageProvider.class)
|
((handler, base, platform) -> Init.ofPure(Construct.construct(() -> {
|
||||||
.register(addon.key("STRUCTURE"), pack -> new StructureGenerationStage(platform)))
|
handler.register(base, ConfigPackPreLoadEvent.class)
|
||||||
.failThrough();
|
.then(event -> event.getPack()
|
||||||
|
.getOrCreateRegistry(GenerationStageProvider.class)
|
||||||
platform.getEventManager()
|
.register(base.key("STRUCTURE"), pack -> new StructureGenerationStage(platform)))
|
||||||
.getHandler(FunctionalEventHandler.class)
|
.failThrough();
|
||||||
.register(addon, ConfigurationLoadEvent.class)
|
return handler.register(base, ConfigurationLoadEvent.class)
|
||||||
.then(event -> {
|
.then(event -> {
|
||||||
if(event.is(Biome.class)) {
|
if(event.is(Biome.class)) {
|
||||||
event.getLoadedObject(Biome.class).getContext().put(event.load(new BiomeStructuresTemplate()).get());
|
event.getLoadedObject(Biome.class).getContext().put(
|
||||||
}
|
event.load(new BiomeStructuresTemplate()).get());
|
||||||
})
|
}
|
||||||
.failThrough();
|
})
|
||||||
|
.failThrough();
|
||||||
|
}))));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+21
-16
@@ -8,10 +8,17 @@
|
|||||||
package com.dfsek.terra.addons.yaml;
|
package com.dfsek.terra.addons.yaml;
|
||||||
|
|
||||||
import com.dfsek.tectonic.yaml.YamlConfiguration;
|
import com.dfsek.tectonic.yaml.YamlConfiguration;
|
||||||
|
|
||||||
|
import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Do;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Get;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Init;
|
||||||
|
|
||||||
|
import com.dfsek.terra.api.util.function.monad.Monad;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
|
|
||||||
import com.dfsek.terra.api.Platform;
|
import com.dfsek.terra.api.Platform;
|
||||||
import com.dfsek.terra.api.addon.BaseAddon;
|
import com.dfsek.terra.api.addon.BaseAddon;
|
||||||
import com.dfsek.terra.api.event.events.config.ConfigurationDiscoveryEvent;
|
import com.dfsek.terra.api.event.events.config.ConfigurationDiscoveryEvent;
|
||||||
@@ -19,24 +26,22 @@ import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
|||||||
import com.dfsek.terra.api.inject.annotations.Inject;
|
import com.dfsek.terra.api.inject.annotations.Inject;
|
||||||
|
|
||||||
|
|
||||||
public class YamlAddon implements AddonInitializer {
|
public class YamlAddon implements MonadAddonInitializer {
|
||||||
|
|
||||||
private static final Logger LOGGER = LoggerFactory.getLogger(YamlAddon.class);
|
private static final Logger LOGGER = LoggerFactory.getLogger(YamlAddon.class);
|
||||||
@Inject
|
|
||||||
private Platform platform;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private BaseAddon addon;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize() {
|
public Monad<?, Init<?>> initialize() {
|
||||||
platform.getEventManager()
|
return Do.with(
|
||||||
.getHandler(FunctionalEventHandler.class)
|
Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)),
|
||||||
.register(addon, ConfigurationDiscoveryEvent.class)
|
Get.addon(),
|
||||||
.then(event -> event.getLoader().open("", ".yml").thenEntries(entries -> entries.forEach(entry -> {
|
((handler, base) -> Init.ofPure(
|
||||||
LOGGER.debug("Discovered config {}", entry.getKey());
|
handler.register(base, ConfigurationDiscoveryEvent.class)
|
||||||
event.register(entry.getKey(), new YamlConfiguration(entry.getValue(), entry.getKey()));
|
.then(event -> event.getLoader().open("", ".yml").thenEntries(entries -> entries.forEach(entry -> {
|
||||||
})).close())
|
LOGGER.debug("Discovered config {}", entry.getKey());
|
||||||
.failThrough();
|
event.register(entry.getKey(), new YamlConfiguration(entry.getValue(), entry.getKey()));
|
||||||
|
})).close())
|
||||||
|
.failThrough()))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+9
@@ -0,0 +1,9 @@
|
|||||||
|
package com.dfsek.terra.addons.manifest.api;
|
||||||
|
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Init;
|
||||||
|
import com.dfsek.terra.api.util.function.monad.Monad;
|
||||||
|
|
||||||
|
|
||||||
|
public interface MonadAddonInitializer {
|
||||||
|
Monad<?, Init<?>> initialize();
|
||||||
|
}
|
||||||
+108
@@ -0,0 +1,108 @@
|
|||||||
|
package com.dfsek.terra.addons.manifest.api.monad;
|
||||||
|
|
||||||
|
import io.vavr.Function1;
|
||||||
|
import io.vavr.Function2;
|
||||||
|
import io.vavr.Function3;
|
||||||
|
import io.vavr.Function4;
|
||||||
|
|
||||||
|
import com.dfsek.terra.api.util.function.monad.Monad;
|
||||||
|
|
||||||
|
|
||||||
|
public final class Do {
|
||||||
|
private Do() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T, M extends Monad<?, M>> Monad<T, M> with(Monad<T, M> monad) {
|
||||||
|
return monad;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T, U, M extends Monad<?, M>> Monad<U, M> with(Monad<T, M> monad,
|
||||||
|
Function1<T, Monad<U, M>> bind) {
|
||||||
|
return monad
|
||||||
|
.bind(bind);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T, U, V, M extends Monad<?, M>> Monad<V, M> with(Monad<T, M> monad,
|
||||||
|
Function1<T, Monad<U, M>> bind,
|
||||||
|
Function2<T, U, Monad<V, M>> bind2) {
|
||||||
|
return monad
|
||||||
|
.bind(t -> monad
|
||||||
|
.bind(bind)
|
||||||
|
.bind(bind2.apply(t)));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T, U, V, M extends Monad<?, M>> Monad<V, M> with(Monad<T, M> monad,
|
||||||
|
Monad<U, M> monad2,
|
||||||
|
Function2<T, U, Monad<V, M>> bind2) {
|
||||||
|
return with(monad, Function1.constant(monad2), bind2);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T, U, V, W, M extends Monad<?, M>> Monad<W, M> with(Monad<T, M> monad,
|
||||||
|
Function1<T, Monad<U, M>> bind,
|
||||||
|
Function2<T, U, Monad<V, M>> bind2,
|
||||||
|
Function3<T, U, V, Monad<W, M>> bind3) {
|
||||||
|
return monad
|
||||||
|
.bind(t -> monad
|
||||||
|
.bind(bind)
|
||||||
|
.bind(u -> bind2.apply(t)
|
||||||
|
.andThen(vmMonad -> vmMonad
|
||||||
|
.bind(bind3.apply(t, u)))
|
||||||
|
.apply(u)));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T, U, V, W, M extends Monad<?, M>> Monad<W, M> with(Monad<T, M> monad,
|
||||||
|
Monad<U, M> monad2,
|
||||||
|
Function2<T, U, Monad<V, M>> bind2,
|
||||||
|
Function3<T, U, V, Monad<W, M>> bind3) {
|
||||||
|
return with(monad, Function1.constant(monad2), bind2, bind3);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T, U, V, W, M extends Monad<?, M>> Monad<W, M> with(Monad<T, M> monad,
|
||||||
|
Monad<U, M> monad2,
|
||||||
|
Monad<V, M> monad3,
|
||||||
|
Function3<T, U, V, Monad<W, M>> bind3) {
|
||||||
|
return with(monad, monad2, Function2.constant(monad3), bind3);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T, U, V, W, X, M extends Monad<?, M>> Monad<X, M> with(Monad<T, M> monad,
|
||||||
|
Function1<T, Monad<U, M>> bind,
|
||||||
|
Function2<T, U, Monad<V, M>> bind2,
|
||||||
|
Function3<T, U, V, Monad<W, M>> bind3,
|
||||||
|
Function4<T, U, V, W, Monad<X, M>> bind4) {
|
||||||
|
return monad
|
||||||
|
.bind(t -> monad
|
||||||
|
.bind(bind)
|
||||||
|
.bind(u -> bind2.apply(t)
|
||||||
|
.andThen(vmMonad -> vmMonad
|
||||||
|
.bind(v -> bind3.apply(t, u)
|
||||||
|
.andThen(wmMonad -> wmMonad
|
||||||
|
.bind(bind4.apply(t, u, v)))
|
||||||
|
.apply(v)))
|
||||||
|
.apply(u)));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T, U, V, W, X, M extends Monad<?, M>> Monad<X, M> with(Monad<T, M> monad,
|
||||||
|
Monad<U, M> monad2,
|
||||||
|
Function2<T, U, Monad<V, M>> bind2,
|
||||||
|
Function3<T, U, V, Monad<W, M>> bind3,
|
||||||
|
Function4<T, U, V, W, Monad<X, M>> bind4) {
|
||||||
|
return with(monad, Function1.constant(monad2), bind2, bind3, bind4);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T, U, V, W, X, M extends Monad<?, M>> Monad<X, M> with(Monad<T, M> monad,
|
||||||
|
Monad<U, M> monad2,
|
||||||
|
Monad<V, M> monad3,
|
||||||
|
Function3<T, U, V, Monad<W, M>> bind3,
|
||||||
|
Function4<T, U, V, W, Monad<X, M>> bind4) {
|
||||||
|
return with(monad, monad2, Function2.constant(monad3), bind3, bind4);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T, U, V, W, X, M extends Monad<?, M>> Monad<X, M> with(Monad<T, M> monad,
|
||||||
|
Monad<U, M> monad2,
|
||||||
|
Monad<V, M> monad3,
|
||||||
|
Monad<W, M> monad4,
|
||||||
|
Function4<T, U, V, W, Monad<X, M>> bind4) {
|
||||||
|
return with(monad, monad2, monad3, Function3.constant(monad4), bind4);
|
||||||
|
}
|
||||||
|
}
|
||||||
+25
@@ -0,0 +1,25 @@
|
|||||||
|
package com.dfsek.terra.addons.manifest.api.monad;
|
||||||
|
|
||||||
|
import com.dfsek.terra.addons.manifest.impl.InitInfo;
|
||||||
|
import com.dfsek.terra.api.Platform;
|
||||||
|
import com.dfsek.terra.api.addon.BaseAddon;
|
||||||
|
import com.dfsek.terra.api.event.EventManager;
|
||||||
|
|
||||||
|
|
||||||
|
public final class Get {
|
||||||
|
private Get() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Init<EventManager> eventManager() {
|
||||||
|
return Init.of(initInfo -> initInfo.platform().getEventManager());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Init<BaseAddon> addon() {
|
||||||
|
return Init.of(InitInfo::addon);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Init<Platform> platform() {
|
||||||
|
return Init.of(InitInfo::platform);
|
||||||
|
}
|
||||||
|
}
|
||||||
+43
@@ -0,0 +1,43 @@
|
|||||||
|
package com.dfsek.terra.addons.manifest.api.monad;
|
||||||
|
|
||||||
|
import com.dfsek.terra.addons.manifest.impl.InitInfo;
|
||||||
|
import com.dfsek.terra.api.util.function.Functions;
|
||||||
|
import com.dfsek.terra.api.util.function.monad.Monad;
|
||||||
|
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
|
||||||
|
public class Init<T> implements Monad<T, Init<?>> {
|
||||||
|
private final Function<InitInfo, T> get;
|
||||||
|
|
||||||
|
public static <T> Init<T> of(Function<InitInfo, T> get) {
|
||||||
|
return new Init<>(get);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Init(Function<InitInfo, T> get) {
|
||||||
|
this.get = get;
|
||||||
|
}
|
||||||
|
|
||||||
|
public T apply(InitInfo platform) {
|
||||||
|
return get.apply(platform);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <U> Init<U> bind(Function<T, Monad<U, Init<?>>> map) {
|
||||||
|
return new Init<>(info -> ((Init<U>) map.apply(apply(info))).apply(info));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <U> Init<U> map(Function<T, U> fn) {
|
||||||
|
return (Init<U>) Monad.super.map(fn);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <U> Monad<U, Init<?>> pure(U u) {
|
||||||
|
return ofPure(u);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> Init<T> ofPure(T t) {
|
||||||
|
return of(Functions.constant(t));
|
||||||
|
}
|
||||||
|
}
|
||||||
+13
@@ -0,0 +1,13 @@
|
|||||||
|
package com.dfsek.terra.addons.manifest.impl;
|
||||||
|
|
||||||
|
import com.dfsek.terra.api.Platform;
|
||||||
|
import com.dfsek.terra.api.addon.BaseAddon;
|
||||||
|
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
|
||||||
|
public record InitInfo(
|
||||||
|
Platform platform,
|
||||||
|
BaseAddon addon
|
||||||
|
) {
|
||||||
|
}
|
||||||
+66
@@ -0,0 +1,66 @@
|
|||||||
|
package com.dfsek.terra.addons.manifest.impl;
|
||||||
|
|
||||||
|
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Init;
|
||||||
|
import com.dfsek.terra.api.Platform;
|
||||||
|
import com.dfsek.terra.api.addon.BaseAddon;
|
||||||
|
import com.dfsek.terra.api.inject.Injector;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
|
||||||
|
public abstract class Initializer {
|
||||||
|
private Initializer() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Initializer of(MonadAddonInitializer addon) {
|
||||||
|
return new MonadInitializer(addon);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Initializer of(AddonInitializer addonInitializer) {
|
||||||
|
return new BasicInitializer(addonInitializer);
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract void initialize(InitInfo info);
|
||||||
|
|
||||||
|
private static class MonadInitializer extends Initializer {
|
||||||
|
private final MonadAddonInitializer addon;
|
||||||
|
|
||||||
|
private MonadInitializer(MonadAddonInitializer addon) {
|
||||||
|
this.addon = addon;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initialize(InitInfo info) {
|
||||||
|
((Init<?>) addon.initialize()).apply(info);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static class BasicInitializer extends Initializer {
|
||||||
|
private final AddonInitializer initializer;
|
||||||
|
|
||||||
|
private BasicInitializer(AddonInitializer initializer) {
|
||||||
|
this.initializer = initializer;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initialize(InitInfo info) {
|
||||||
|
Injector<BaseAddon> addonInjector = Injector.get(info.addon());
|
||||||
|
addonInjector.addExplicitTarget(BaseAddon.class);
|
||||||
|
|
||||||
|
Injector<Platform> platformInjector = Injector.get(info.platform());
|
||||||
|
platformInjector.addExplicitTarget(Platform.class);
|
||||||
|
|
||||||
|
Injector<Logger> loggerInjector = Injector.get(LoggerFactory.getLogger(initializer.getClass()));
|
||||||
|
loggerInjector.addExplicitTarget(Logger.class);
|
||||||
|
addonInjector.inject(initializer);
|
||||||
|
platformInjector.inject(initializer);
|
||||||
|
loggerInjector.inject(initializer);
|
||||||
|
initializer.initialize();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+3
-13
@@ -26,11 +26,11 @@ import com.dfsek.terra.api.inject.annotations.Inject;
|
|||||||
public class ManifestAddon implements BaseAddon {
|
public class ManifestAddon implements BaseAddon {
|
||||||
private static final Logger logger = LoggerFactory.getLogger(ManifestAddon.class);
|
private static final Logger logger = LoggerFactory.getLogger(ManifestAddon.class);
|
||||||
private final AddonManifest manifest;
|
private final AddonManifest manifest;
|
||||||
private final List<AddonInitializer> initializers;
|
private final List<Initializer> initializers;
|
||||||
@Inject
|
@Inject
|
||||||
private Platform platform;
|
private Platform platform;
|
||||||
|
|
||||||
public ManifestAddon(AddonManifest manifest, List<AddonInitializer> initializers) {
|
public ManifestAddon(AddonManifest manifest, List<Initializer> initializers) {
|
||||||
this.manifest = manifest;
|
this.manifest = manifest;
|
||||||
this.initializers = initializers;
|
this.initializers = initializers;
|
||||||
}
|
}
|
||||||
@@ -45,23 +45,13 @@ public class ManifestAddon implements BaseAddon {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void initialize() {
|
public void initialize() {
|
||||||
Injector<BaseAddon> addonInjector = Injector.get(this);
|
|
||||||
addonInjector.addExplicitTarget(BaseAddon.class);
|
|
||||||
|
|
||||||
Injector<Platform> platformInjector = Injector.get(platform);
|
|
||||||
platformInjector.addExplicitTarget(Platform.class);
|
|
||||||
|
|
||||||
logger.debug("Initializing addon {}", getID());
|
logger.debug("Initializing addon {}", getID());
|
||||||
|
|
||||||
initializers.forEach(initializer -> {
|
initializers.forEach(initializer -> {
|
||||||
Injector<Logger> loggerInjector = Injector.get(LoggerFactory.getLogger(initializer.getClass()));
|
|
||||||
loggerInjector.addExplicitTarget(Logger.class);
|
|
||||||
|
|
||||||
logger.debug("Invoking entry point {}", initializer.getClass());
|
logger.debug("Invoking entry point {}", initializer.getClass());
|
||||||
addonInjector.inject(initializer);
|
initializer.initialize(new InitInfo(platform, this));
|
||||||
platformInjector.inject(initializer);
|
|
||||||
loggerInjector.inject(initializer);
|
|
||||||
initializer.initialize();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+11
-4
@@ -13,6 +13,9 @@ import ca.solostudios.strata.version.VersionRange;
|
|||||||
import com.dfsek.tectonic.api.exception.LoadException;
|
import com.dfsek.tectonic.api.exception.LoadException;
|
||||||
import com.dfsek.tectonic.api.loader.ConfigLoader;
|
import com.dfsek.tectonic.api.loader.ConfigLoader;
|
||||||
import com.dfsek.tectonic.yaml.YamlConfiguration;
|
import com.dfsek.tectonic.yaml.YamlConfiguration;
|
||||||
|
|
||||||
|
import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
@@ -72,13 +75,17 @@ public class ManifestAddonLoader implements BootstrapBaseAddon<ManifestAddon> {
|
|||||||
throw new AddonException("Addon " + manifest.getID() + " has unknown schema version: " + manifest.getSchemaVersion());
|
throw new AddonException("Addon " + manifest.getID() + " has unknown schema version: " + manifest.getSchemaVersion());
|
||||||
}
|
}
|
||||||
|
|
||||||
List<AddonInitializer> initializers = manifest.getEntryPoints().stream().map(entryPoint -> {
|
List<Initializer> initializers = manifest.getEntryPoints().stream().map(entryPoint -> {
|
||||||
try {
|
try {
|
||||||
Object in = loader.loadClass(entryPoint).getConstructor().newInstance();
|
Object in = loader.loadClass(entryPoint).getConstructor().newInstance();
|
||||||
if(!(in instanceof AddonInitializer)) {
|
if(in instanceof AddonInitializer a) {
|
||||||
throw new AddonException(in.getClass() + " does not extend " + AddonInitializer.class);
|
return Initializer.of(a);
|
||||||
}
|
}
|
||||||
return (AddonInitializer) in;
|
|
||||||
|
if(in instanceof MonadAddonInitializer m) {
|
||||||
|
return Initializer.of(m);
|
||||||
|
}
|
||||||
|
throw new AddonException(in.getClass() + " is not a valid initializer" );
|
||||||
} catch(InvocationTargetException e) {
|
} catch(InvocationTargetException e) {
|
||||||
throw new AddonException("Exception occurred while instantiating addon", e);
|
throw new AddonException("Exception occurred while instantiating addon", e);
|
||||||
} catch(NoSuchMethodException | IllegalAccessException | InstantiationException e) {
|
} catch(NoSuchMethodException | IllegalAccessException | InstantiationException e) {
|
||||||
|
|||||||
+20
-18
@@ -1,30 +1,32 @@
|
|||||||
package com.dfsek.terra.addons.palette.shortcut.block;
|
package com.dfsek.terra.addons.palette.shortcut.block;
|
||||||
|
|
||||||
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
|
import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer;
|
||||||
import com.dfsek.terra.api.Platform;
|
import com.dfsek.terra.addons.manifest.api.monad.Do;
|
||||||
import com.dfsek.terra.api.addon.BaseAddon;
|
import com.dfsek.terra.addons.manifest.api.monad.Get;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Init;
|
||||||
import com.dfsek.terra.api.block.state.BlockState;
|
import com.dfsek.terra.api.block.state.BlockState;
|
||||||
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
||||||
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
||||||
import com.dfsek.terra.api.inject.annotations.Inject;
|
import com.dfsek.terra.api.util.function.monad.Monad;
|
||||||
import com.dfsek.terra.api.world.chunk.generation.util.Palette;
|
import com.dfsek.terra.api.world.chunk.generation.util.Palette;
|
||||||
|
|
||||||
|
|
||||||
public class PaletteBlockShortcutAddon implements AddonInitializer {
|
public class PaletteBlockShortcutAddon implements MonadAddonInitializer {
|
||||||
@Inject
|
|
||||||
private BaseAddon addon;
|
|
||||||
@Inject
|
|
||||||
private Platform platform;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize() {
|
public Monad<?, Init<?>> initialize() {
|
||||||
platform.getEventManager()
|
return Do.with(
|
||||||
.getHandler(FunctionalEventHandler.class)
|
Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)),
|
||||||
.register(addon, ConfigPackPreLoadEvent.class)
|
Get.addon(),
|
||||||
.then(event -> event.getPack()
|
Get.platform(),
|
||||||
.registerShortcut(Palette.class, "BLOCK",
|
((handler, base, platform) -> Init.ofPure(
|
||||||
(configLoader, input, tracker) -> new SingletonPalette(
|
handler.register(base, ConfigPackPreLoadEvent.class)
|
||||||
configLoader.loadType(BlockState.class, input, tracker))))
|
.then(event -> event.getPack()
|
||||||
.failThrough();
|
.registerShortcut(Palette.class, "BLOCK",
|
||||||
|
(configLoader, input, tracker) -> new SingletonPalette(
|
||||||
|
configLoader.loadType(BlockState.class, input, tracker))))
|
||||||
|
.failThrough()))
|
||||||
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+19
-17
@@ -1,6 +1,9 @@
|
|||||||
package com.dfsek.terra.addons.palette.shortcut.block;
|
package com.dfsek.terra.addons.palette.shortcut.block;
|
||||||
|
|
||||||
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
|
import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Do;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Get;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Init;
|
||||||
import com.dfsek.terra.api.Platform;
|
import com.dfsek.terra.api.Platform;
|
||||||
import com.dfsek.terra.api.addon.BaseAddon;
|
import com.dfsek.terra.api.addon.BaseAddon;
|
||||||
import com.dfsek.terra.api.block.state.BlockState;
|
import com.dfsek.terra.api.block.state.BlockState;
|
||||||
@@ -8,24 +11,23 @@ import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
|||||||
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
||||||
import com.dfsek.terra.api.inject.annotations.Inject;
|
import com.dfsek.terra.api.inject.annotations.Inject;
|
||||||
import com.dfsek.terra.api.structure.Structure;
|
import com.dfsek.terra.api.structure.Structure;
|
||||||
|
import com.dfsek.terra.api.util.function.monad.Monad;
|
||||||
|
|
||||||
|
|
||||||
public class StructureBlockShortcutAddon implements AddonInitializer {
|
public class StructureBlockShortcutAddon implements MonadAddonInitializer {
|
||||||
@Inject
|
|
||||||
private BaseAddon addon;
|
|
||||||
@Inject
|
|
||||||
private Platform platform;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize() {
|
public Monad<?, Init<?>> initialize() {
|
||||||
platform.getEventManager()
|
return Do.with(
|
||||||
.getHandler(FunctionalEventHandler.class)
|
Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)),
|
||||||
.register(addon, ConfigPackPreLoadEvent.class)
|
Get.addon(),
|
||||||
.then(event -> event.getPack()
|
((handler, base) -> Init.ofPure(
|
||||||
.registerShortcut(Structure.class, "BLOCK",
|
handler.register(base, ConfigPackPreLoadEvent.class)
|
||||||
(configLoader, input, tracker) -> new SingletonStructure(
|
.then(event -> event.getPack()
|
||||||
configLoader.loadType(BlockState.class, input, tracker)
|
.registerShortcut(Structure.class, "BLOCK",
|
||||||
)))
|
(configLoader, input, tracker) -> new SingletonStructure(
|
||||||
.failThrough();
|
configLoader.loadType(BlockState.class, input, tracker)
|
||||||
|
)))
|
||||||
|
.failThrough()))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+17
-17
@@ -1,29 +1,29 @@
|
|||||||
package com.dfsek.terra.addons.structure.mutator;
|
package com.dfsek.terra.addons.structure.mutator;
|
||||||
|
|
||||||
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
|
import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Do;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Get;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Init;
|
||||||
import com.dfsek.terra.api.Platform;
|
import com.dfsek.terra.api.Platform;
|
||||||
import com.dfsek.terra.api.addon.BaseAddon;
|
import com.dfsek.terra.api.addon.BaseAddon;
|
||||||
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
||||||
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
||||||
import com.dfsek.terra.api.inject.annotations.Inject;
|
import com.dfsek.terra.api.inject.annotations.Inject;
|
||||||
|
import com.dfsek.terra.api.util.function.monad.Monad;
|
||||||
|
|
||||||
|
|
||||||
public class StructureMutatorAddon implements AddonInitializer {
|
public class StructureMutatorAddon implements MonadAddonInitializer {
|
||||||
@Inject
|
|
||||||
private Platform platform;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private BaseAddon addon;
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize() {
|
public Monad<?, Init<?>> initialize() {
|
||||||
platform.getEventManager()
|
return Do.with(
|
||||||
.getHandler(FunctionalEventHandler.class)
|
Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)),
|
||||||
.register(addon, ConfigPackPreLoadEvent.class)
|
Get.addon(),
|
||||||
.then(event -> {
|
((handler, base) -> Init.ofPure(
|
||||||
event.getPack().registerConfigType(new MutatedStructureConfigType(addon), addon.key("MUTATED_STRUCTURE"), 499);
|
handler.register(base, ConfigPackPreLoadEvent.class)
|
||||||
})
|
.then(event -> {
|
||||||
.failThrough();
|
event.getPack().registerConfigType(new MutatedStructureConfigType(base), base.key("MUTATED_STRUCTURE"), 499);
|
||||||
|
})
|
||||||
|
.failThrough()))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+28
-24
@@ -7,6 +7,13 @@
|
|||||||
|
|
||||||
package com.dfsek.terra.addons.sponge;
|
package com.dfsek.terra.addons.sponge;
|
||||||
|
|
||||||
|
import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Do;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Get;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Init;
|
||||||
|
|
||||||
|
import com.dfsek.terra.api.util.function.monad.Monad;
|
||||||
|
|
||||||
import net.querz.nbt.io.NBTDeserializer;
|
import net.querz.nbt.io.NBTDeserializer;
|
||||||
import net.querz.nbt.tag.ByteArrayTag;
|
import net.querz.nbt.tag.ByteArrayTag;
|
||||||
import net.querz.nbt.tag.CompoundTag;
|
import net.querz.nbt.tag.CompoundTag;
|
||||||
@@ -20,7 +27,6 @@ import java.util.HashMap;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.zip.GZIPInputStream;
|
import java.util.zip.GZIPInputStream;
|
||||||
|
|
||||||
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
|
|
||||||
import com.dfsek.terra.api.Platform;
|
import com.dfsek.terra.api.Platform;
|
||||||
import com.dfsek.terra.api.addon.BaseAddon;
|
import com.dfsek.terra.api.addon.BaseAddon;
|
||||||
import com.dfsek.terra.api.block.state.BlockState;
|
import com.dfsek.terra.api.block.state.BlockState;
|
||||||
@@ -32,13 +38,7 @@ import com.dfsek.terra.api.structure.Structure;
|
|||||||
import com.dfsek.terra.api.util.StringUtil;
|
import com.dfsek.terra.api.util.StringUtil;
|
||||||
|
|
||||||
|
|
||||||
public class SpongeSchematicAddon implements AddonInitializer {
|
public class SpongeSchematicAddon implements MonadAddonInitializer {
|
||||||
@Inject
|
|
||||||
private Platform platform;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private BaseAddon addon;
|
|
||||||
|
|
||||||
private static InputStream detectDecompression(InputStream is) throws IOException {
|
private static InputStream detectDecompression(InputStream is) throws IOException {
|
||||||
PushbackInputStream pbis = new PushbackInputStream(is, 2);
|
PushbackInputStream pbis = new PushbackInputStream(is, 2);
|
||||||
int signature = (pbis.read() & 0xFF) + (pbis.read() << 8);
|
int signature = (pbis.read() & 0xFF) + (pbis.read() << 8);
|
||||||
@@ -51,24 +51,28 @@ public class SpongeSchematicAddon implements AddonInitializer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize() {
|
public Monad<?, Init<?>> initialize() {
|
||||||
platform.getEventManager()
|
return Do.with(
|
||||||
.getHandler(FunctionalEventHandler.class)
|
Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)),
|
||||||
.register(addon, ConfigPackPreLoadEvent.class)
|
Get.addon(),
|
||||||
.then(event -> {
|
Get.platform(),
|
||||||
CheckedRegistry<Structure> structureRegistry = event.getPack().getOrCreateRegistry(Structure.class);
|
((handler, base, platform) -> Init.ofPure(
|
||||||
event.getPack()
|
handler.register(base, ConfigPackPreLoadEvent.class)
|
||||||
.getLoader()
|
.then(event -> {
|
||||||
.open("", ".schem")
|
CheckedRegistry<Structure> structureRegistry = event.getPack().getOrCreateRegistry(Structure.class);
|
||||||
.thenEntries(entries -> entries
|
event.getPack()
|
||||||
.stream()
|
.getLoader()
|
||||||
.map(entry -> convert(entry.getValue(), StringUtil.fileName(entry.getKey())))
|
.open("", ".schem")
|
||||||
.forEach(structureRegistry::register)).close();
|
.thenEntries(entries -> entries
|
||||||
})
|
.stream()
|
||||||
.failThrough();
|
.map(entry -> convert(entry.getValue(), StringUtil.fileName(entry.getKey()), platform, base))
|
||||||
|
.forEach(structureRegistry::register)).close();
|
||||||
|
})
|
||||||
|
.failThrough()))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public SpongeStructure convert(InputStream in, String id) {
|
public SpongeStructure convert(InputStream in, String id, Platform platform, BaseAddon addon) {
|
||||||
try {
|
try {
|
||||||
CompoundTag baseTag = (CompoundTag) new NBTDeserializer(false).fromStream(detectDecompression(in)).getTag();
|
CompoundTag baseTag = (CompoundTag) new NBTDeserializer(false).fromStream(detectDecompression(in)).getTag();
|
||||||
int wid = baseTag.getShort("Width");
|
int wid = baseTag.getShort("Width");
|
||||||
|
|||||||
+40
-38
@@ -7,7 +7,10 @@
|
|||||||
|
|
||||||
package com.dfsek.terra.addons.terrascript;
|
package com.dfsek.terra.addons.terrascript;
|
||||||
|
|
||||||
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
|
import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Do;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Get;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Init;
|
||||||
import com.dfsek.terra.addons.terrascript.parser.exceptions.ParseException;
|
import com.dfsek.terra.addons.terrascript.parser.exceptions.ParseException;
|
||||||
import com.dfsek.terra.addons.terrascript.parser.lang.functions.FunctionBuilder;
|
import com.dfsek.terra.addons.terrascript.parser.lang.functions.FunctionBuilder;
|
||||||
import com.dfsek.terra.addons.terrascript.script.StructureScript;
|
import com.dfsek.terra.addons.terrascript.script.StructureScript;
|
||||||
@@ -20,45 +23,44 @@ import com.dfsek.terra.api.registry.CheckedRegistry;
|
|||||||
import com.dfsek.terra.api.structure.LootTable;
|
import com.dfsek.terra.api.structure.LootTable;
|
||||||
import com.dfsek.terra.api.structure.Structure;
|
import com.dfsek.terra.api.structure.Structure;
|
||||||
import com.dfsek.terra.api.util.StringUtil;
|
import com.dfsek.terra.api.util.StringUtil;
|
||||||
|
import com.dfsek.terra.api.util.function.monad.Monad;
|
||||||
|
|
||||||
|
|
||||||
public class TerraScriptAddon implements AddonInitializer {
|
public class TerraScriptAddon implements MonadAddonInitializer {
|
||||||
@Inject
|
|
||||||
private Platform platform;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private BaseAddon addon;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize() {
|
public Monad<?, Init<?>> initialize() {
|
||||||
platform.getEventManager()
|
return Do.with(
|
||||||
.getHandler(FunctionalEventHandler.class)
|
Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)),
|
||||||
.register(addon, ConfigPackPreLoadEvent.class)
|
Get.addon(),
|
||||||
.then(event -> {
|
Get.platform(),
|
||||||
CheckedRegistry<Structure> structureRegistry = event.getPack().getOrCreateRegistry(Structure.class);
|
((handler, base, platform) -> Init.ofPure(
|
||||||
CheckedRegistry<LootTable> lootRegistry = event.getPack().getOrCreateRegistry(LootTable.class);
|
handler.register(base, ConfigPackPreLoadEvent.class)
|
||||||
event.getPack().getLoader().open("", ".tesf").thenEntries(
|
.then(event -> {
|
||||||
entries ->
|
CheckedRegistry<Structure> structureRegistry = event.getPack().getOrCreateRegistry(Structure.class);
|
||||||
entries.stream()
|
CheckedRegistry<LootTable> lootRegistry = event.getPack().getOrCreateRegistry(LootTable.class);
|
||||||
.parallel()
|
event.getPack().getLoader().open("", ".tesf").thenEntries(
|
||||||
.map(entry -> {
|
entries ->
|
||||||
try {
|
entries.stream()
|
||||||
String id = StringUtil.fileName(entry.getKey());
|
.parallel()
|
||||||
return new StructureScript(entry.getValue(),
|
.map(entry -> {
|
||||||
addon.key(id),
|
try {
|
||||||
platform,
|
String id = StringUtil.fileName(entry.getKey());
|
||||||
structureRegistry,
|
return new StructureScript(entry.getValue(),
|
||||||
lootRegistry,
|
base.key(id),
|
||||||
event.getPack().getOrCreateRegistry(FunctionBuilder.class));
|
platform,
|
||||||
} catch(ParseException e) {
|
structureRegistry,
|
||||||
throw new RuntimeException("Failed to load script \"" + entry.getKey() + "\"", e);
|
lootRegistry,
|
||||||
}
|
event.getPack().getOrCreateRegistry(FunctionBuilder.class));
|
||||||
})
|
} catch(ParseException e) {
|
||||||
.toList()
|
throw new RuntimeException("Failed to load script \"" + entry.getKey() + "\"", e);
|
||||||
.forEach(structureRegistry::register))
|
}
|
||||||
.close();
|
})
|
||||||
})
|
.toList()
|
||||||
.priority(100)
|
.forEach(structureRegistry::register))
|
||||||
.failThrough();
|
.close();
|
||||||
|
})
|
||||||
|
.priority(100)
|
||||||
|
.failThrough()))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+20
-18
@@ -1,31 +1,33 @@
|
|||||||
package com.dfsek.terra.addon.terrascript.check;
|
package com.dfsek.terra.addon.terrascript.check;
|
||||||
|
|
||||||
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
|
import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Do;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Get;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Init;
|
||||||
import com.dfsek.terra.addons.terrascript.parser.lang.functions.FunctionBuilder;
|
import com.dfsek.terra.addons.terrascript.parser.lang.functions.FunctionBuilder;
|
||||||
import com.dfsek.terra.api.Platform;
|
import com.dfsek.terra.api.Platform;
|
||||||
import com.dfsek.terra.api.addon.BaseAddon;
|
import com.dfsek.terra.api.addon.BaseAddon;
|
||||||
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
||||||
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
||||||
import com.dfsek.terra.api.inject.annotations.Inject;
|
import com.dfsek.terra.api.inject.annotations.Inject;
|
||||||
|
import com.dfsek.terra.api.util.function.monad.Monad;
|
||||||
|
|
||||||
|
|
||||||
public class TerraScriptCheckFunctionAddon implements AddonInitializer {
|
public class TerraScriptCheckFunctionAddon implements MonadAddonInitializer {
|
||||||
@Inject
|
|
||||||
private Platform platform;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private BaseAddon addon;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize() {
|
public Monad<?, Init<?>> initialize() {
|
||||||
platform.getEventManager()
|
return Do.with(
|
||||||
.getHandler(FunctionalEventHandler.class)
|
Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)),
|
||||||
.register(addon, ConfigPackPreLoadEvent.class)
|
Get.addon(),
|
||||||
.priority(1)
|
Get.platform(),
|
||||||
.then(event -> {
|
((handler, base, platform) -> Init.ofPure(
|
||||||
event.getPack().getOrCreateRegistry(FunctionBuilder.class).register(addon.key("check"),
|
handler.register(base, ConfigPackPreLoadEvent.class)
|
||||||
new CheckFunctionBuilder(platform));
|
.priority(1)
|
||||||
})
|
.then(event -> event
|
||||||
.failThrough();
|
.getPack()
|
||||||
|
.getOrCreateRegistry(FunctionBuilder.class)
|
||||||
|
.register(base.key("check"), new CheckFunctionBuilder(platform)))
|
||||||
|
.failThrough()))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+20
-20
@@ -1,6 +1,9 @@
|
|||||||
package com.dfsek.terra.addons.terrascript.sampler;
|
package com.dfsek.terra.addons.terrascript.sampler;
|
||||||
|
|
||||||
import com.dfsek.terra.addons.manifest.api.AddonInitializer;
|
import com.dfsek.terra.addons.manifest.api.MonadAddonInitializer;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Do;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Get;
|
||||||
|
import com.dfsek.terra.addons.manifest.api.monad.Init;
|
||||||
import com.dfsek.terra.addons.noise.NoiseConfigPackTemplate;
|
import com.dfsek.terra.addons.noise.NoiseConfigPackTemplate;
|
||||||
import com.dfsek.terra.addons.terrascript.parser.lang.functions.FunctionBuilder;
|
import com.dfsek.terra.addons.terrascript.parser.lang.functions.FunctionBuilder;
|
||||||
import com.dfsek.terra.api.Platform;
|
import com.dfsek.terra.api.Platform;
|
||||||
@@ -8,27 +11,24 @@ import com.dfsek.terra.api.addon.BaseAddon;
|
|||||||
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent;
|
||||||
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
import com.dfsek.terra.api.event.functional.FunctionalEventHandler;
|
||||||
import com.dfsek.terra.api.inject.annotations.Inject;
|
import com.dfsek.terra.api.inject.annotations.Inject;
|
||||||
|
import com.dfsek.terra.api.util.function.monad.Monad;
|
||||||
|
|
||||||
|
|
||||||
public class TerraScriptSamplerFunctionAddon implements AddonInitializer {
|
public class TerraScriptSamplerFunctionAddon implements MonadAddonInitializer {
|
||||||
@Inject
|
|
||||||
private Platform platform;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
private BaseAddon addon;
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize() {
|
public Monad<?, Init<?>> initialize() {
|
||||||
platform.getEventManager()
|
return Do.with(
|
||||||
.getHandler(FunctionalEventHandler.class)
|
Get.eventManager().map(eventManager -> eventManager.getHandler(FunctionalEventHandler.class)),
|
||||||
.register(addon, ConfigPackPreLoadEvent.class)
|
Get.addon(),
|
||||||
.priority(51)
|
((handler, base) -> Init.ofPure(
|
||||||
.then(event -> event
|
handler.register(base, ConfigPackPreLoadEvent.class)
|
||||||
.getPack()
|
.priority(51)
|
||||||
.getOrCreateRegistry(FunctionBuilder.class)
|
.then(event -> event
|
||||||
.register(addon.key("sampler"), new SamplerFunctionBuilder(event.getPack().getContext().get(
|
.getPack()
|
||||||
NoiseConfigPackTemplate.class).getSamplers())))
|
.getOrCreateRegistry(FunctionBuilder.class)
|
||||||
.failThrough();
|
.register(base.key("sampler"), new SamplerFunctionBuilder(event.getPack().getContext().get(
|
||||||
|
NoiseConfigPackTemplate.class).getSamplers())))
|
||||||
|
.failThrough()))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,9 @@ dependencies {
|
|||||||
|
|
||||||
api("com.dfsek.tectonic", "common", Versions.Libraries.tectonic)
|
api("com.dfsek.tectonic", "common", Versions.Libraries.tectonic)
|
||||||
|
|
||||||
api("com.github.ben-manes.caffeine:caffeine:3.1.0")
|
api("com.github.ben-manes.caffeine", "caffeine", Versions.Libraries.caffeine)
|
||||||
|
|
||||||
|
api("io.vavr", "vavr", Versions.Libraries.vavr)
|
||||||
|
|
||||||
implementation("net.jafama", "jafama", Versions.Libraries.Internal.jafama)
|
implementation("net.jafama", "jafama", Versions.Libraries.Internal.jafama)
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package com.dfsek.terra.api.util.function;
|
||||||
|
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
|
||||||
|
public final class Functions {
|
||||||
|
private Functions() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T, U> Function<T, U> constant(U value) {
|
||||||
|
return ignore -> value;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,6 +3,6 @@ package com.dfsek.terra.api.util.function.functor;
|
|||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
|
||||||
public interface Functor<T> {
|
public interface Functor<T, F extends Functor<?, F>> {
|
||||||
<U> Functor<U> map(Function<T, U> map);
|
<U> Functor<U, F> map(Function<T, U> map);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,16 @@
|
|||||||
package com.dfsek.terra.api.util.function.monad;
|
package com.dfsek.terra.api.util.function.monad;
|
||||||
|
|
||||||
|
import com.dfsek.terra.api.util.function.functor.Functor;
|
||||||
|
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
|
||||||
public interface Monad<T> {
|
public interface Monad<T, M extends Monad<?, M>> extends Functor<T, M> {
|
||||||
<U> Monad<U> bind(Function<T, Monad<U>> map);
|
<U> Monad<U, M> bind(Function<T, Monad<U, M>> map);
|
||||||
|
|
||||||
|
default <U> Monad<U, M> map(Function<T, U> fn) {
|
||||||
|
return bind(a -> pure(fn.apply(a)));
|
||||||
|
}
|
||||||
|
|
||||||
|
<U> Monad<U, M> pure(U u);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user