78 lines
2.8 KiB
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;
|
|
}
|
|
}
|
|
}
|