update reg
This commit is contained in:
@@ -113,7 +113,7 @@ if (lljij.toBoolean()) {
|
||||
|
||||
dependencies {
|
||||
//annotationProcessor "org.spongepowered:mixin:${mixin_version}:processor"
|
||||
//compileOnly fg.deobf("com.tterrag.registrate:Registrate:${registrate_version}")
|
||||
compileOnly "com.tterrag.registrate:Registrate:${registrate_version}"
|
||||
if (rootMod.toBoolean()) {
|
||||
//jarJar(group: 'com.tterrag.registrate', name: 'Registrate', version: "[MC1.20,MC1.21)")
|
||||
}
|
||||
@@ -125,9 +125,6 @@ repositories {
|
||||
flatDir {
|
||||
dirs 'libs'
|
||||
}
|
||||
maven { // Registrate
|
||||
url "https://maven.tterrag.com/"
|
||||
}
|
||||
maven {
|
||||
url = "https://maven.theillusivec4.top/"
|
||||
}
|
||||
|
||||
@@ -26,8 +26,9 @@ mod_description=Core Library mod for all L2 mods
|
||||
|
||||
jei_minecraft_version = 1.21-neoforge
|
||||
jei_version = 19.0.0.7
|
||||
registrate_version = MC1.21-1.4.0
|
||||
|
||||
lljij = false
|
||||
rootMod = false
|
||||
|
||||
l2serial_ver = 3.0.0-pre3
|
||||
l2serial_ver = 3.0.0
|
||||
BIN
libs/Registrate-MC1.21-1.4.0.jar
Normal file
BIN
libs/Registrate-MC1.21-1.4.0.jar
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,168 @@
|
||||
package dev.xkmc.l2core.init.reg.registrate;
|
||||
|
||||
import net.minecraft.core.registries.BuiltInRegistries;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.item.CreativeModeTab;
|
||||
|
||||
public class L2Registrate extends AbstractRegistrate<L2Registrate> {
|
||||
|
||||
public L2Registrate(String modid) {
|
||||
super(modid);
|
||||
registerEventListeners(FMLJavaModLoadingContext.get().getModEventBus());
|
||||
}
|
||||
|
||||
public <T extends NamedEntry<T>, P extends T> GenericBuilder<T, P> generic(RegistryInstance<T> cls, String id, NonNullSupplier<P> sup) {
|
||||
return entry(id, cb -> new GenericBuilder<>(this, id, cb, cls.key(), sup));
|
||||
}
|
||||
|
||||
public <T extends Recipe<?>> RegistryEntry<RecipeType<T>> recipe(String id) {
|
||||
return simple(id, ForgeRegistries.Keys.RECIPE_TYPES, () -> new RecipeType<>() {
|
||||
});
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@Override
|
||||
public <T extends Enchantment> EnchantmentBuilder<T, L2Registrate> enchantment(String name, EnchantmentCategory type, EnchantmentBuilder.EnchantmentFactory<T> factory) {
|
||||
return super.enchantment(name, type, factory);
|
||||
}
|
||||
|
||||
public <T extends Enchantment> EnchantmentBuilder<T, L2Registrate> enchantment(String name, EnchantmentCategory type, EnchantmentBuilder.EnchantmentFactory<T> factory, String desc) {
|
||||
addRawLang("enchantment." + getModid() + "." + name + ".desc", desc);
|
||||
return super.enchantment(name, type, factory);
|
||||
}
|
||||
|
||||
public <T extends MobEffect> NoConfigBuilder<MobEffect, T, L2Registrate> effect(String name, NonNullSupplier<T> sup, String desc) {
|
||||
addRawLang("effect." + getModid() + "." + name + ".description", desc);
|
||||
return entry(name, cb -> new NoConfigBuilder<>(this, this, name, cb, ForgeRegistries.Keys.MOB_EFFECTS, sup));
|
||||
}
|
||||
|
||||
@SuppressWarnings({"unchecked", "unsafe"})
|
||||
public <E extends NamedEntry<E>> RegistryInstance<E> newRegistry(String id, Class<?> cls, Consumer<RegistryBuilder<E>> cons) {
|
||||
ResourceKey<Registry<E>> key = makeRegistry(id, () -> {
|
||||
var ans = new RegistryBuilder<E>();
|
||||
ans.onCreate((r, s) -> new RLClassHandler<>((Class<E>) cls, () -> r));
|
||||
cons.accept(ans);
|
||||
return ans;
|
||||
});
|
||||
return new RegistryInstance<>(Suppliers.memoize(() -> RegistryManager.ACTIVE.getRegistry(key)), key);
|
||||
}
|
||||
|
||||
public <E extends NamedEntry<E>> RegistryInstance<E> newRegistry(String id, Class<?> cls) {
|
||||
return newRegistry(id, cls, e -> {
|
||||
});
|
||||
}
|
||||
|
||||
public synchronized RegistryEntry<CreativeModeTab> buildModCreativeTab(String name, String def, Consumer<CreativeModeTab.Builder> config) {
|
||||
ResourceLocation id = new ResourceLocation(getModid(), name);
|
||||
defaultCreativeTab(ResourceKey.create(Registries.CREATIVE_MODE_TAB, id));
|
||||
return buildCreativeTabImpl(name, this.addLang("itemGroup", id, def), config);
|
||||
}
|
||||
|
||||
public synchronized RegistryEntry<CreativeModeTab> buildL2CreativeTab(String name, String def, Consumer<CreativeModeTab.Builder> config) {
|
||||
ResourceLocation id = new ResourceLocation(L2Library.MODID, name);
|
||||
defaultCreativeTab(ResourceKey.create(Registries.CREATIVE_MODE_TAB, id));
|
||||
TabSorter sorter = new TabSorter(getModid() + ":" + name, id);
|
||||
return L2Library.REGISTRATE.buildCreativeTabImpl(name, this.addLang("itemGroup", id, def), b -> {
|
||||
config.accept(b);
|
||||
sorter.sort(b);
|
||||
});
|
||||
}
|
||||
|
||||
private synchronized RegistryEntry<CreativeModeTab> buildCreativeTabImpl(String name, Component comp, Consumer<CreativeModeTab.Builder> config) {
|
||||
return this.generic(self(), name, Registries.CREATIVE_MODE_TAB, () -> {
|
||||
var builder = CreativeModeTab.builder().title(comp)
|
||||
.withTabsBefore(CreativeModeTabs.SPAWN_EGGS);
|
||||
config.accept(builder);
|
||||
return builder.build();
|
||||
}).register();
|
||||
}
|
||||
|
||||
public record RegistryInstance<E extends NamedEntry<E>>(Supplier<IForgeRegistry<E>> supplier,
|
||||
ResourceKey<Registry<E>> key) implements Supplier<IForgeRegistry<E>> {
|
||||
|
||||
@Override
|
||||
public IForgeRegistry<E> get() {
|
||||
return supplier().get();
|
||||
}
|
||||
}
|
||||
|
||||
public static class GenericBuilder<T extends NamedEntry<T>, P extends T> extends AbstractBuilder<T, P, L2Registrate, GenericBuilder<T, P>> {
|
||||
|
||||
private final NonNullSupplier<P> sup;
|
||||
|
||||
GenericBuilder(L2Registrate parent, String name, BuilderCallback callback, ResourceKey<Registry<T>> registryType, NonNullSupplier<P> sup) {
|
||||
super(parent, parent, name, callback, registryType);
|
||||
this.sup = sup;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected @NonnullType @NotNull P createEntry() {
|
||||
return sup.get();
|
||||
}
|
||||
|
||||
public GenericBuilder<T, P> defaultLang() {
|
||||
return lang(NamedEntry::getDescriptionId, RegistrateLangProvider.toEnglishName(this.getName()));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static class TabSorter {
|
||||
|
||||
private static final TreeMap<String, TabSorter> MAP = new TreeMap<>();
|
||||
private static final HashSet<ResourceLocation> SET = new HashSet<>();
|
||||
|
||||
private final ResourceLocation id;
|
||||
|
||||
private TabSorter(String str, ResourceLocation id) {
|
||||
MAP.put(str, this);
|
||||
SET.add(id);
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public void sort(CreativeModeTab.Builder b) {
|
||||
var list = new ArrayList<>(MAP.values());
|
||||
boolean after = false;
|
||||
ResourceLocation before = null;
|
||||
for (var e : list) {
|
||||
if (e == this) {
|
||||
after = true;
|
||||
if (before != null) {
|
||||
b.withTabsBefore(before);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (after) {
|
||||
b.withTabsAfter(e.id);
|
||||
return;
|
||||
} else {
|
||||
before = e.id;
|
||||
}
|
||||
}
|
||||
for (var e : BuiltInRegistries.CREATIVE_MODE_TAB.entrySet()) {
|
||||
var id = e.getKey().location();
|
||||
if (known(id) || known(e.getValue())) {
|
||||
continue;
|
||||
}
|
||||
b.withTabsAfter(id);
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean known(ResourceLocation id) {
|
||||
if (id.getNamespace().equals("minecraft")) {
|
||||
return true;
|
||||
}
|
||||
return SET.contains(id);
|
||||
}
|
||||
|
||||
private static boolean known(CreativeModeTab tab) {
|
||||
for (var other : tab.tabsAfter) {
|
||||
if (known(other)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
package dev.xkmc.l2core.init.reg.registrate;
|
||||
|
||||
/*TODO
|
||||
public class NamedEntry<T extends NamedEntry<T>> {
|
||||
|
||||
private final L2Registrate.RegistryInstance<T> registry;
|
||||
|
||||
private String desc = null;
|
||||
|
||||
public NamedEntry(L2Registrate.RegistryInstance<T> registry) {
|
||||
this.registry = registry;
|
||||
}
|
||||
|
||||
public @NotNull String getDescriptionId() {
|
||||
if (desc != null)
|
||||
return desc;
|
||||
ResourceLocation rl = getRegistryName();
|
||||
ResourceLocation reg = registry.get().getRegistryName();
|
||||
desc = reg.getPath() + "." + rl.getNamespace() + "." + rl.getPath();
|
||||
return desc;
|
||||
}
|
||||
|
||||
public MutableComponent getDesc() {
|
||||
return Component.translatable(getDescriptionId());
|
||||
}
|
||||
|
||||
public ResourceLocation getRegistryName() {
|
||||
return Objects.requireNonNull(registry.get().getKey(getThis()));
|
||||
}
|
||||
|
||||
public String getID() {
|
||||
return getRegistryName().toString();
|
||||
}
|
||||
|
||||
public T getThis() {
|
||||
return Wrappers.cast(this);
|
||||
}
|
||||
|
||||
}
|
||||
*/
|
||||
@@ -0,0 +1,8 @@
|
||||
@MethodsReturnNonnullByDefault
|
||||
@ParametersAreNonnullByDefault
|
||||
|
||||
package dev.xkmc.l2core.init.reg.registrate;
|
||||
|
||||
import net.minecraft.MethodsReturnNonnullByDefault;
|
||||
|
||||
import javax.annotation.ParametersAreNonnullByDefault;
|
||||
Reference in New Issue
Block a user