VmodExtras/src/main/java/space/eptaproject/vmodaddon/util/ModRegistry.java

78 lines
2.8 KiB
Java

package space.eptaproject.vmodaddon.util;
import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap;
import lombok.Getter;
import net.minecraft.core.registries.Registries;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.CreativeModeTabs;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
import java.util.Map;
import java.util.function.Consumer;
public class ModRegistry {
@Getter
private final String modid;
public final DeferredRegister<Block> BLOCKS;
public final DeferredRegister<BlockEntityType<?>> BLOCK_ENTITIES;
public final Map<RegistryObject<CreativeModeTab>, DeferredRegister<Item>> ITEMS;
public final DeferredRegister<CreativeModeTab> CREATIVE_MODE_TABS;
public ModRegistry(String modid) {
this.modid = modid;
this.BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, modid);
this.BLOCK_ENTITIES = DeferredRegister.create(ForgeRegistries.BLOCK_ENTITY_TYPES, modid);
this.ITEMS = new Object2ObjectArrayMap<>();
this.CREATIVE_MODE_TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, modid);
}
public TabBuilder TabBuilder() {
return new TabBuilder(this);
}
public void register(IEventBus bus) {
this.BLOCKS.register(bus);
this.BLOCK_ENTITIES.register(bus);
this.CREATIVE_MODE_TABS.register(bus);
for (DeferredRegister<Item> registry : ITEMS.values()) {
registry.register(bus);
}
}
public static class TabBuilder {
private final ModRegistry registry;
public final DeferredRegister<Item> ITEMS;
public TabBuilder(ModRegistry registry) {
this.registry = registry;
this.ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, registry.modid);
}
public TabBuilder push(Consumer<DeferredRegister<Item>> registry) {
registry.accept(ITEMS);
return this;
}
public RegistryObject<CreativeModeTab> build(String name, ItemStack icon) {
RegistryObject<CreativeModeTab> tab = this.registry.CREATIVE_MODE_TABS.register(name, () -> CreativeModeTab.builder().withTabsBefore(CreativeModeTabs.COMBAT).icon(() -> icon).displayItems((parameters, output) -> {
for (RegistryObject<Item> object : ITEMS.getEntries()) {
output.accept(object.get());
}
}).build());
this.registry.ITEMS.put(tab, this.ITEMS);
return tab;
}
}
}