Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
MinecraftForge
GitHub Repository: MinecraftForge/MinecraftForge
Path: blob/1.21.x/src/test/java/net/minecraftforge/debug/creativetabs/CreativeModeTabTest.java
7172 views
1
/*
2
* Copyright (c) Forge Development LLC and contributors
3
* SPDX-License-Identifier: LGPL-2.1-only
4
*/
5
6
package net.minecraftforge.debug.creativetabs;
7
8
import java.util.List;
9
import net.minecraft.core.registries.Registries;
10
import net.minecraft.network.chat.Component;
11
import net.minecraft.resources.ResourceKey;
12
import net.minecraft.resources.ResourceLocation;
13
import net.minecraft.world.item.CreativeModeTab;
14
import net.minecraft.world.item.CreativeModeTab.TabVisibility;
15
import net.minecraft.world.item.DyeColor;
16
import net.minecraft.world.item.DyeItem;
17
import net.minecraft.world.item.ItemStack;
18
import net.minecraft.world.item.Items;
19
import net.minecraft.world.level.ItemLike;
20
import net.minecraft.world.level.block.Block;
21
import net.minecraft.world.level.block.Blocks;
22
import net.minecraftforge.event.BuildCreativeModeTabContentsEvent;
23
import net.minecraftforge.fml.common.Mod;
24
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
25
import net.minecraftforge.registries.RegisterEvent;
26
27
@Mod(CreativeModeTabTest.MOD_ID)
28
public class CreativeModeTabTest {
29
public static final String MOD_ID = "creative_mode_tab_test";
30
private static final boolean ENABLED = true;
31
32
private static final ResourceKey<CreativeModeTab> LOGS = ResourceKey.create(Registries.CREATIVE_MODE_TAB, ResourceLocation.fromNamespaceAndPath(MOD_ID, "logs"));
33
private static final ResourceKey<CreativeModeTab> STONE = ResourceKey.create(Registries.CREATIVE_MODE_TAB, ResourceLocation.fromNamespaceAndPath(MOD_ID, "stone"));
34
private static final ResourceKey<CreativeModeTab> COLORS = ResourceKey.create(Registries.CREATIVE_MODE_TAB, ResourceLocation.fromNamespaceAndPath(MOD_ID, "colors"));
35
private static final ResourceKey<CreativeModeTab> SEARCH = ResourceKey.create(Registries.CREATIVE_MODE_TAB, ResourceLocation.fromNamespaceAndPath(MOD_ID, "search"));
36
37
public CreativeModeTabTest(FMLJavaModLoadingContext context) {
38
if (!ENABLED)
39
return;
40
41
var modBus = context.getModBusGroup();
42
43
RegisterEvent.getBus(modBus).addListener(CreativeModeTabTest::onCreativeModeTabRegister);
44
BuildCreativeModeTabContentsEvent.getBus(modBus).addListener(CreativeModeTabTest::onCreativeModeTabBuildContents);
45
}
46
47
private static void onCreativeModeTabRegister(RegisterEvent event) {
48
event.register(Registries.CREATIVE_MODE_TAB, helper -> {
49
helper.register(LOGS, CreativeModeTab.builder().icon(() -> new ItemStack(Blocks.ACACIA_LOG))
50
.title(Component.literal("Logs"))
51
.withLabelColor(0x00FF00)
52
.displayItems((params, output) -> {
53
output.accept(new ItemStack(Blocks.ACACIA_LOG));
54
output.accept(new ItemStack(Blocks.BIRCH_LOG));
55
output.accept(new ItemStack(Blocks.DARK_OAK_LOG));
56
output.accept(new ItemStack(Blocks.JUNGLE_LOG));
57
output.accept(new ItemStack(Blocks.OAK_LOG));
58
output.accept(new ItemStack(Blocks.SPRUCE_LOG));
59
})
60
.build());
61
62
helper.register(STONE, CreativeModeTab.builder()
63
.icon(() -> new ItemStack(Blocks.STONE))
64
.title(Component.literal("Stone"))
65
.withLabelColor(0x0000FF)
66
.displayItems((params, output) -> {
67
output.accept(new ItemStack(Blocks.STONE));
68
output.accept(new ItemStack(Blocks.GRANITE));
69
output.accept(new ItemStack(Blocks.DIORITE));
70
output.accept(new ItemStack(Blocks.ANDESITE));
71
})
72
.withTabsBefore(LOGS)
73
.build());
74
75
helper.register(COLORS, CreativeModeTab.builder()
76
.title(Component.literal("Colors"))
77
.displayItems((params, output) -> {
78
for (DyeColor color : DyeColor.values())
79
output.accept(DyeItem.byColor(color));
80
})
81
.withTabFactory(CreativeModeColorTab::new)
82
.withTabsBefore(STONE)
83
.build()
84
);
85
86
helper.register(SEARCH, CreativeModeTab.builder()
87
.title(Component.literal("Search"))
88
.icon(() -> new ItemStack(Items.BOOKSHELF))
89
.displayItems((params, output) -> {
90
for (DyeColor color : DyeColor.values())
91
output.accept(DyeItem.byColor(color));
92
})
93
.withTabsBefore(COLORS)
94
.withSearchBar()
95
.build()
96
);
97
98
List<Block> blocks = List.of(Blocks.GRANITE, Blocks.DIORITE, Blocks.ANDESITE, Blocks.COBBLESTONE);
99
for (int i = 0; i < blocks.size(); i++) {
100
Block block = blocks.get(i);
101
helper.register(ResourceLocation.fromNamespaceAndPath(MOD_ID, "dummy" + i), CreativeModeTab.builder()
102
.title(Component.literal("Dummy " + i))
103
.icon(() -> new ItemStack(block))
104
.displayItems((params, output) -> output.accept(block))
105
.build()
106
);
107
}
108
109
//final ResourceLocation custom_tabs_image = new ResourceLocation(MOD_ID, "textures/gui/container/creative_inventory/custom_tabs.png");
110
helper.register(ResourceLocation.fromNamespaceAndPath(MOD_ID, "with_tabs_image"), CreativeModeTab.builder()
111
.title(Component.translatable("itemGroup.with_tabs_image"))
112
.icon(() -> new ItemStack(Blocks.BRICKS))
113
.displayItems((params, output) -> output.accept(Blocks.BRICKS))
114
//.withTabsImage(custom_tabs_image)
115
.build());
116
});
117
}
118
119
private static ItemStack i(ItemLike item) { return new ItemStack(item); }
120
121
private static void onCreativeModeTabBuildContents(BuildCreativeModeTabContentsEvent event) {
122
var entries = event.getEntries();
123
var vis = TabVisibility.PARENT_AND_SEARCH_TABS;
124
if (event.getTabKey() == LOGS) {
125
entries.putAfter(i(Blocks.ACACIA_LOG), i(Blocks.STRIPPED_ACACIA_LOG), vis);
126
entries.putAfter(i(Blocks.BIRCH_LOG), i(Blocks.STRIPPED_BIRCH_LOG), vis);
127
entries.putAfter(i(Blocks.DARK_OAK_LOG), i(Blocks.STRIPPED_DARK_OAK_LOG), vis);
128
entries.putAfter(i(Blocks.JUNGLE_LOG), i(Blocks.STRIPPED_JUNGLE_LOG), vis);
129
entries.putAfter(i(Blocks.OAK_LOG), i(Blocks.STRIPPED_OAK_LOG), vis);
130
entries.putAfter(i(Blocks.SPRUCE_LOG), i(Blocks.STRIPPED_SPRUCE_LOG), vis);
131
}
132
133
if (event.getTabKey() == STONE) {
134
entries.putBefore(i(Blocks.STONE), i(Blocks.SMOOTH_STONE), vis);
135
entries.putBefore(i(Blocks.GRANITE), i(Blocks.POLISHED_GRANITE), vis);
136
entries.putBefore(i(Blocks.DIORITE), i(Blocks.POLISHED_DIORITE), vis);
137
entries.putBefore(i(Blocks.ANDESITE), i(Blocks.POLISHED_ANDESITE), vis);
138
}
139
}
140
141
private static class CreativeModeColorTab extends CreativeModeTab {
142
private final ItemStack[] iconItems;
143
144
public CreativeModeColorTab(CreativeModeTab.Builder builder) {
145
super(builder);
146
147
DyeColor[] colors = DyeColor.values();
148
iconItems = new ItemStack[colors.length];
149
for (int i = 0; i < colors.length; i++)
150
iconItems[i] = new ItemStack(DyeItem.byColor(colors[i]));
151
}
152
153
@Override
154
public ItemStack getIconItem() {
155
int idx = (int)(System.currentTimeMillis() / 1200) % iconItems.length;
156
return iconItems[idx];
157
}
158
}
159
}
160
161