Skip to content

Commit cfe3b29

Browse files
committed
重新处理一下粗矿和粗矿模型,降低一些启动时间
1 parent 84056b1 commit cfe3b29

File tree

4 files changed

+89
-81
lines changed

4 files changed

+89
-81
lines changed

src/main/java/github/kasuminova/novaeng/client/ClientProxy.java

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -44,15 +44,13 @@
4444
import it.unimi.dsi.fastutil.ints.IntList;
4545
import it.unimi.dsi.fastutil.objects.Object2IntMap;
4646
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
47-
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
4847
import it.unimi.dsi.fastutil.objects.ObjectLists;
48+
import it.unimi.dsi.fastutil.objects.ReferenceArrayList;
4949
import lombok.Getter;
5050
import net.minecraft.block.Block;
5151
import net.minecraft.block.state.IBlockState;
5252
import net.minecraft.client.Minecraft;
5353
import net.minecraft.client.renderer.block.model.BakedQuad;
54-
import net.minecraft.client.renderer.color.BlockColors;
55-
import net.minecraft.client.renderer.color.ItemColors;
5654
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
5755
import net.minecraft.client.resources.I18n;
5856
import net.minecraft.entity.player.EntityPlayer;
@@ -67,11 +65,9 @@
6765
import net.minecraftforge.client.ClientCommandHandler;
6866
import net.minecraftforge.client.event.ModelRegistryEvent;
6967
import net.minecraftforge.client.model.ModelLoaderRegistry;
70-
import net.minecraftforge.client.resource.VanillaResourceType;
7168
import net.minecraftforge.common.MinecraftForge;
7269
import net.minecraftforge.common.config.Config;
7370
import net.minecraftforge.common.config.ConfigManager;
74-
import net.minecraftforge.fml.client.FMLClientHandler;
7571
import net.minecraftforge.fml.client.registry.ClientRegistry;
7672
import net.minecraftforge.fml.common.Loader;
7773
import net.minecraftforge.fml.common.Mod;
@@ -92,8 +88,6 @@
9288
public class ClientProxy extends CommonProxy {
9389

9490
private static final Object2IntMap<String> colorCache = new Object2IntOpenHashMap<>();
95-
public static List<Item> items = new ObjectArrayList<>();
96-
public static List<Block> blocks = new ObjectArrayList<>();
9791
@Getter
9892
private static List<String> itemDisplayTooltip;
9993

@@ -189,29 +183,27 @@ public void preInit() {
189183
TitleUtils.setRandomTitle("*PreInit*");
190184
}
191185

186+
public static List<Item> colorsItems = new ReferenceArrayList<>();
187+
public static List<Block> colorsBlocks = new ReferenceArrayList<>();
188+
192189
@Override
193190
public void init() {
194191
super.init();
195192

196-
TitleUtils.setRandomTitle("*Init*");
197-
198193
if (Loader.isModLoaded("ic2") && Loader.isModLoaded("randomtweaker")) {
199194
ExJEI.jeiCreate();
200195
}
196+
197+
TitleUtils.setRandomTitle("*Init*");
201198
}
202199

203200
@Override
204201
public void postInit() {
205202
super.postInit();
206203

207-
ClientCommandHandler.instance.registerCommand(ExportResearchDataToJson.INSTANCE);
208-
ClientCommandHandler.instance.registerCommand(CommandPacketProfiler.INSTANCE);
209-
210-
TitleUtils.setRandomTitle("*PostInit*");
211-
212204
Minecraft mc = Minecraft.getMinecraft();
213-
BlockColors blockColors = mc.getBlockColors();
214-
ItemColors itemColors = mc.getItemColors();
205+
var blockColors = mc.getBlockColors();
206+
var itemColors = mc.getItemColors();
215207

216208
itemColors.registerItemColorHandler((stack, i) -> {
217209
var item = stack.getItem();
@@ -222,21 +214,27 @@ public void postInit() {
222214
return getColorForODFirst(r.getPartOD());
223215
}
224216
return Color.WHITE.getRGB();
225-
}, items.toArray(new Item[0]));
217+
}, colorsItems.toArray(new Item[0]));
218+
colorsItems = null;
226219

227220
blockColors.registerBlockColorHandler((state, worldIn, pos, i) -> {
228221
if (state.getBlock() instanceof ItemRawOre.BlockRawOre blockRawOre) {
229222
return getColorForODFirst(blockRawOre.getPartOD());
230223
}
231224
return Color.WHITE.getRGB();
232-
}, blocks.toArray(new Block[0]));
225+
}, colorsBlocks.toArray(new Block[0]));
226+
colorsBlocks = null;
227+
228+
ClientCommandHandler.instance.registerCommand(ExportResearchDataToJson.INSTANCE);
229+
ClientCommandHandler.instance.registerCommand(CommandPacketProfiler.INSTANCE);
233230

234231
if (Loader.isModLoaded("ic2") && Loader.isModLoaded("randomtweaker")) {
235232
ExJEI.jeiRecipeRegister();
236233
}
237234

238235
TinkerBook.INSTANCE.addTransformer(BookTransformerAppendModifiers.INSTANCE_FALSE);
239-
FMLClientHandler.instance().refreshResources(VanillaResourceType.TEXTURES, VanillaResourceType.MODELS);
236+
237+
TitleUtils.setRandomTitle("*PostInit*");
240238
}
241239

242240
@Override

src/main/java/github/kasuminova/novaeng/client/model/raw_ore/RawOreModelLoader.java

Lines changed: 29 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,17 @@
66
import github.kasuminova.novaeng.client.ClientProxy;
77
import github.kasuminova.novaeng.common.item.ItemRawOre;
88
import net.minecraft.client.Minecraft;
9-
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
109
import net.minecraft.client.resources.IResourceManager;
1110
import net.minecraft.item.Item;
1211
import net.minecraft.util.ResourceLocation;
1312
import net.minecraftforge.client.model.ICustomModelLoader;
1413
import net.minecraftforge.client.model.IModel;
1514
import net.minecraftforge.client.model.ItemLayerModel;
16-
import net.minecraftforge.client.model.ModelLoader;
1715
import net.minecraftforge.client.model.ModelLoaderRegistry;
1816
import org.jetbrains.annotations.NotNull;
1917

18+
import java.io.IOException;
19+
2020
public class RawOreModelLoader implements ICustomModelLoader {
2121

2222
final RawOreOverrideList overrideList = new RawOreOverrideList();
@@ -33,37 +33,35 @@ public boolean accepts(ResourceLocation modelLocation) {
3333
@Override
3434
public @NotNull IModel loadModel(@NotNull ResourceLocation location) {
3535
IResourceManager mngr = Minecraft.getMinecraft().getResourceManager();
36-
try {
37-
final boolean isBlock = location.getPath().contains("block");
38-
final String[] split = location.getPath().split("\\.")[0].split("/");
39-
final var s = split[split.length - 1].split("_",
40-
isBlock ? 3 : split[split.length - 1].contains("gem") ? 4 : 3);
41-
final String id = s[s.length - 1];
42-
final ItemRawOre.BlockRawOre block = ItemRawOre.getRawBlock(id);
43-
final ItemRawOre.Type type;
44-
final Item item;
45-
if (block != null) {
46-
if (isBlock) {
47-
type = ItemRawOre.Type.BLOCK;
48-
item = block.getItem();
49-
} else {
50-
ItemRawOre i = ItemRawOre.getRawOre(id);
51-
type = i.getType();
52-
item = i;
53-
}
36+
final boolean isBlock = location.getPath().contains("block");
37+
final String[] split = location.getPath().split("\\.")[0].split("/");
38+
final var s = split[split.length - 1].split("_",
39+
isBlock ? 3 : split[split.length - 1].contains("gem") ? 4 : 3);
40+
final String id = s[s.length - 1];
41+
final ItemRawOre.BlockRawOre block = ItemRawOre.getRawBlock(id);
42+
final ItemRawOre.Type type;
43+
final Item item;
44+
if (block != null) {
45+
if (isBlock) {
46+
type = ItemRawOre.Type.BLOCK;
47+
item = block.getItem();
5448
} else {
55-
return ModelLoaderRegistry.getMissingModel();
56-
}
57-
String name = isBlock ? "blocks/raw_block/" + split[split.length - 1] : "items/raw_ore/" + split[split.length - 1];
58-
try {
59-
mngr.getAllResources(NovaEngineeringCore.getRL("textures/" + name + ".png"));
60-
ModelResourceLocation itemLoc = new ModelResourceLocation(NovaEngineeringCore.getRLStr(name));
61-
ModelLoader.setCustomModelResourceLocation(item, 0, itemLoc);
62-
} catch (Exception e) {
63-
name = type.getDefR();
64-
ClientProxy.items.add(item);
65-
if (isBlock) ClientProxy.blocks.add(block);
49+
ItemRawOre i = ItemRawOre.getRawOre(id);
50+
type = i.getType();
51+
item = i;
6652
}
53+
} else {
54+
return ModelLoaderRegistry.getMissingModel();
55+
}
56+
String name = isBlock ? "blocks/raw_block/" + split[split.length - 1] : "items/raw_ore/" + split[split.length - 1];
57+
try {
58+
mngr.getAllResources(NovaEngineeringCore.getRL("textures/" + name + ".png"));
59+
} catch (IOException e) {
60+
name = type.getDefR();
61+
ClientProxy.colorsItems.add(item);
62+
if (isBlock) ClientProxy.colorsBlocks.add(block);
63+
}
64+
try {
6765
if (isBlock) {
6866
return ModelLoaderRegistry.getModel(NovaEngineeringCore.getRL("block/raw_block/raw_block")).retexture(ImmutableMap.of("all", NovaEngineeringCore.getRL(name).toString()));
6967
} else {

src/main/java/github/kasuminova/novaeng/common/handler/OreHandler.java

Lines changed: 26 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,12 @@
44
import crafttweaker.api.item.IItemStack;
55
import crafttweaker.api.minecraft.CraftTweakerMC;
66
import github.kasuminova.novaeng.NovaEngineeringCore;
7-
import it.unimi.dsi.fastutil.objects.Object2ObjectMap;
8-
import it.unimi.dsi.fastutil.objects.Object2ObjectMaps;
7+
import github.kasuminova.novaeng.common.item.ItemRawOre;
98
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
9+
import it.unimi.dsi.fastutil.objects.Object2ReferenceMap;
10+
import it.unimi.dsi.fastutil.objects.Object2ReferenceMaps;
11+
import it.unimi.dsi.fastutil.objects.Object2ReferenceOpenHashMap;
12+
import lombok.val;
1013
import net.minecraft.block.Block;
1114
import net.minecraft.block.state.IBlockState;
1215
import net.minecraft.init.Blocks;
@@ -33,9 +36,6 @@ public class OreHandler {
3336
public static final OreHandler INSTANCE = new OreHandler();
3437
public static final Map<String, String> VeinMap = new Object2ObjectOpenHashMap<>();
3538
public static final Map<String, IItemStack> VeinItemMap = new Object2ObjectOpenHashMap<>();
36-
private static final String rawOreOD = "rawOre";
37-
private static final String rawOreGemOD = "rawOreGem";
38-
private static final String oreOD = "ore";
3939
private static Map<OreKey, ItemStack> rawOreMap;
4040
private static Map<OreKey, ItemStack> oreMap;
4141

@@ -85,34 +85,28 @@ public static IItemStack getOreVeinItem(String name) {
8585
}
8686

8787
public static void registry() {
88-
Object2ObjectMap<OreKey, ItemStack> map = new Object2ObjectOpenHashMap<>();
89-
Object2ObjectMap<OreKey, ItemStack> mapO = new Object2ObjectOpenHashMap<>();
90-
91-
for (String odName : OreDictionary.getOreNames()) {
92-
if (odName.startsWith(rawOreOD)) {
93-
if (!OreDictionary.getOres(odName).isEmpty()) {
94-
ItemStack rawOre = OreDictionary.getOres(odName).get(0);
95-
String rawOreName = odName.startsWith(rawOreGemOD) ?
96-
odName.substring(rawOreGemOD.length()) :
97-
odName.substring(rawOreOD.length());
98-
99-
final String oreName = oreOD + rawOreName;
100-
if (!OreDictionary.getOres(oreName).isEmpty()) {
101-
var ores = OreDictionary.getOres(oreName);
102-
final ItemStack ODore = OreDictHelper.getPriorityItemFromOreDict(oreName);
103-
for (ItemStack ore : ores) {
104-
var ok = OreKey.getKey(ore);
105-
map.put(ok, rawOre);
106-
mapO.put(ok, ODore);
107-
NovaEngineeringCore.log.info("registered : {}[{}]", ok.toString(), rawOreName);
108-
}
109-
}
88+
Object2ReferenceMap<OreKey, ItemStack> map = new Object2ReferenceOpenHashMap<>();
89+
Object2ReferenceMap<OreKey, ItemStack> mapO = new Object2ReferenceOpenHashMap<>();
90+
91+
for (var entry : ItemRawOre.getRawOreAndName()) {
92+
val rawOreName = entry.getKey();
93+
val rawOreItem = entry.getValue();
94+
ItemStack rawOre = new ItemStack(rawOreItem);
95+
final String oreName = rawOreItem.getOreOD();
96+
if (!OreDictionary.getOres(oreName).isEmpty()) {
97+
var ores = OreDictionary.getOres(oreName);
98+
final ItemStack ODore = OreDictHelper.getPriorityItemFromOreDict(oreName, ores);
99+
for (ItemStack ore : ores) {
100+
var ok = OreKey.getKey(ore);
101+
map.put(ok, rawOre);
102+
mapO.put(ok, ODore);
103+
NovaEngineeringCore.log.info("registered : {}[{}]", ok.toString(), rawOreName);
110104
}
111105
}
112106
}
113107

114-
rawOreMap = Object2ObjectMaps.unmodifiable(map);
115-
oreMap = Object2ObjectMaps.unmodifiable(mapO);
108+
rawOreMap = Object2ReferenceMaps.unmodifiable(map);
109+
oreMap = Object2ReferenceMaps.unmodifiable(mapO);
116110
}
117111

118112
@SubscribeEvent(priority = EventPriority.LOW)
@@ -206,8 +200,10 @@ public static class OreDictHelper {
206200
};
207201

208202
public static ItemStack getPriorityItemFromOreDict(String oreName) {
209-
List<ItemStack> oreEntries = OreDictionary.getOres(oreName);
203+
return getPriorityItemFromOreDict(oreName, OreDictionary.getOres(oreName));
204+
}
210205

206+
public static ItemStack getPriorityItemFromOreDict(String oreName, List<ItemStack> oreEntries) {
211207
return switch (oreEntries.size()) {
212208
case 0 -> ItemStack.EMPTY;
213209
case 1 -> oreEntries.get(0).copy();

src/main/java/github/kasuminova/novaeng/common/item/ItemRawOre.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import github.kasuminova.novaeng.common.util.StringUtils;
66
import it.unimi.dsi.fastutil.objects.Object2ReferenceMap;
77
import it.unimi.dsi.fastutil.objects.Object2ReferenceOpenHashMap;
8+
import it.unimi.dsi.fastutil.objects.ObjectSet;
89
import it.unimi.dsi.fastutil.objects.ReferenceCollection;
910
import lombok.Getter;
1011
import net.minecraft.block.Block;
@@ -18,6 +19,8 @@
1819
import net.minecraftforge.oredict.OreDictionary;
1920
import org.jetbrains.annotations.NotNull;
2021

22+
import java.util.Map;
23+
2124
import static github.kasuminova.novaeng.common.registry.RegistryItems.ITEMS_TO_REGISTER;
2225

2326
public final class ItemRawOre extends Item {
@@ -38,10 +41,13 @@ public ItemStack createIcon() {
3841
}
3942
};
4043
private static final Object2ReferenceMap<String, BlockRawOre> allItemRawBlock = new Object2ReferenceOpenHashMap<>();
44+
private static final Object2ReferenceMap<String, BlockRawOre.ItemBLockRawOre> allItemRawBlockItem = new Object2ReferenceOpenHashMap<>();
4145

4246
@Getter
4347
private final String rawOD;
4448
@Getter
49+
private final String oreOD;
50+
@Getter
4551
private final String partOD;
4652
@Getter
4753
private final String name;
@@ -57,6 +63,7 @@ public ItemRawOre(String name, Type type) {
5763
this.setRegistryName(NovaEngineeringCore.getRL(key));
5864
this.setTranslationKey(NovaEngineeringCore.MOD_ID + '.' + key);
5965
rawOD = type.getOdName(name);
66+
oreOD = "ore" + name;
6067
partOD = type.name().toLowerCase() + name;
6168
allItemRawOre.put(this.name, this);
6269
allItemRawBlock.put(this.name, new BlockRawOre(name));
@@ -71,10 +78,18 @@ public static BlockRawOre getRawBlock(String name) {
7178
return allItemRawBlock.get(name);
7279
}
7380

81+
public static BlockRawOre.ItemBLockRawOre getRawItemBlock(String name) {
82+
return allItemRawBlockItem.get(name);
83+
}
84+
7485
public static ReferenceCollection<ItemRawOre> getRawOres() {
7586
return allItemRawOre.values();
7687
}
7788

89+
public static ObjectSet<Map.Entry<String, ItemRawOre>> getRawOreAndName() {
90+
return allItemRawOre.entrySet();
91+
}
92+
7893
public static ReferenceCollection<BlockRawOre> getRawBlocks() {
7994
return allItemRawBlock.values();
8095
}
@@ -222,7 +237,7 @@ public class BlockRawOre extends Block {
222237
@Getter
223238
private final Type type = Type.BLOCK;
224239
@Getter
225-
private final ItemBlock item;
240+
private final ItemBLockRawOre item;
226241

227242
private BlockRawOre(String name) {
228243
super(Material.ROCK);
@@ -234,6 +249,7 @@ private BlockRawOre(String name) {
234249
this.setRegistryName(NovaEngineeringCore.getRL("raw_block_" + ItemRawOre.this.name));
235250
this.rawOD = type.getOdName(name);
236251
this.item = new ItemBLockRawOre();
252+
allItemRawBlockItem.put(ItemRawOre.this.name, this.item);
237253
}
238254

239255
public String getPartOD() {

0 commit comments

Comments
 (0)