Search in sources :

Example 1 with OreRegisterEvent

use of net.minecraftforge.oredict.OreDictionary.OreRegisterEvent in project GregTech by GregTechCE.

the class OreDictUnifier method onItemRegistration.

@SubscribeEvent
public static void onItemRegistration(OreRegisterEvent event) {
    ItemAndMetadata simpleItemStack = new ItemAndMetadata(event.getOre());
    String oreName = event.getName();
    // cache this registration by name
    stackOreDictName.computeIfAbsent(simpleItemStack, k -> new HashSet<>()).add(oreName);
    List<ItemStack> itemStackListForOreDictName = oreDictNameStacks.computeIfAbsent(oreName, k -> new ArrayList<>());
    addAndSort(itemStackListForOreDictName, event.getOre().copy(), getItemStackComparator());
    // and try to transform registration name into OrePrefix + Material pair
    OrePrefix orePrefix = OrePrefix.getPrefix(oreName);
    Material material = null;
    if (orePrefix == null) {
        // split ore dict name to parts
        // oreBasalticMineralSand -> ore, Basaltic, Mineral, Sand
        ArrayList<String> splits = new ArrayList<>();
        StringBuilder builder = new StringBuilder();
        for (char character : oreName.toCharArray()) {
            if (Character.isUpperCase(character)) {
                if (builder.length() > 0) {
                    splits.add(builder.toString());
                    builder = new StringBuilder().append(character);
                } else
                    splits.add(Character.toString(character));
            } else
                builder.append(character);
        }
        if (builder.length() > 0) {
            splits.add(builder.toString());
        }
        // try to combine in different manners
        // oreBasaltic MineralSand , ore BasalticMineralSand
        StringBuilder buffer = new StringBuilder();
        for (int i = 0; i < splits.size(); i++) {
            buffer.append(splits.get(i));
            // ore -> OrePrefix.ore
            OrePrefix maybePrefix = OrePrefix.getPrefix(buffer.toString());
            // BasalticMineralSand
            String possibleMaterialName = Joiner.on("").join(splits.subList(i + 1, splits.size()));
            // basaltic_mineral_sand
            String underscoreName = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, possibleMaterialName);
            // Materials.BasalticSand
            Material possibleMaterial = Material.MATERIAL_REGISTRY.getObject(underscoreName);
            if (possibleMaterial == null) {
                // if we didn't found real material, try using marker material registry
                possibleMaterial = markerMaterialRegistry.get(underscoreName);
            }
            if (maybePrefix != null && possibleMaterial != null) {
                orePrefix = maybePrefix;
                material = possibleMaterial;
                break;
            }
        }
    }
    // finally register item
    if (orePrefix != null && (material != null || orePrefix.isSelfReferencing)) {
        UnificationEntry unificationEntry = new UnificationEntry(orePrefix, material);
        ArrayList<ItemAndMetadata> itemListForUnifiedEntry = stackUnificationItems.computeIfAbsent(unificationEntry, p -> new ArrayList<>());
        addAndSort(itemListForUnifiedEntry, simpleItemStack, getSimpleItemStackComparator());
        if (!unificationEntry.orePrefix.isMarkerPrefix()) {
            stackUnificationInfo.put(simpleItemStack, unificationEntry);
        }
        orePrefix.processOreRegistration(material);
    }
}
Also used : java.util(java.util) OreRegisterEvent(net.minecraftforge.oredict.OreDictionary.OreRegisterEvent) gregtech.api.unification.stack(gregtech.api.unification.stack) CaseFormat(com.google.common.base.CaseFormat) M(gregtech.api.GTValues.M) IngotMaterial(gregtech.api.unification.material.type.IngotMaterial) Function(java.util.function.Function) Collectors(java.util.stream.Collectors) Material(gregtech.api.unification.material.type.Material) ConfigHolder(gregtech.common.ConfigHolder) CustomModPriorityComparator(gregtech.api.util.CustomModPriorityComparator) ItemStack(net.minecraft.item.ItemStack) MinecraftForge(net.minecraftforge.common.MinecraftForge) OreDictionary(net.minecraftforge.oredict.OreDictionary) SubscribeEvent(net.minecraftforge.fml.common.eventhandler.SubscribeEvent) Entry(java.util.Map.Entry) MarkerMaterial(gregtech.api.unification.material.type.MarkerMaterial) OrePrefix(gregtech.api.unification.ore.OrePrefix) NonNullList(net.minecraft.util.NonNullList) DustMaterial(gregtech.api.unification.material.type.DustMaterial) SimpleEntry(java.util.AbstractMap.SimpleEntry) Nullable(javax.annotation.Nullable) Joiner(com.google.common.base.Joiner) OrePrefix(gregtech.api.unification.ore.OrePrefix) IngotMaterial(gregtech.api.unification.material.type.IngotMaterial) Material(gregtech.api.unification.material.type.Material) MarkerMaterial(gregtech.api.unification.material.type.MarkerMaterial) DustMaterial(gregtech.api.unification.material.type.DustMaterial) ItemStack(net.minecraft.item.ItemStack) SubscribeEvent(net.minecraftforge.fml.common.eventhandler.SubscribeEvent)

Example 2 with OreRegisterEvent

use of net.minecraftforge.oredict.OreDictionary.OreRegisterEvent in project GregTech by GregTechCEu.

the class OreDictUnifier method onItemRegistration.

@SubscribeEvent
public static void onItemRegistration(OreRegisterEvent event) {
    ItemAndMetadata simpleItemStack = new ItemAndMetadata(event.getOre());
    String oreName = event.getName();
    // cache this registration by name
    stackOreDictName.computeIfAbsent(simpleItemStack, k -> new HashSet<>()).add(oreName);
    List<ItemStack> itemStackListForOreDictName = oreDictNameStacks.computeIfAbsent(oreName, k -> new ArrayList<>());
    addAndSort(itemStackListForOreDictName, event.getOre().copy(), getItemStackComparator());
    // and try to transform registration name into OrePrefix + Material pair
    OrePrefix orePrefix = OrePrefix.getPrefix(oreName);
    Material material = null;
    if (orePrefix == null) {
        // split ore dict name to parts
        // oreBasalticMineralSand -> ore, Basaltic, Mineral, Sand
        ArrayList<String> splits = new ArrayList<>();
        StringBuilder builder = new StringBuilder();
        for (char character : oreName.toCharArray()) {
            if (Character.isUpperCase(character)) {
                if (builder.length() > 0) {
                    splits.add(builder.toString());
                    builder = new StringBuilder().append(character);
                } else
                    splits.add(Character.toString(character));
            } else
                builder.append(character);
        }
        if (builder.length() > 0) {
            splits.add(builder.toString());
        }
        // try to combine in different manners
        // oreBasaltic MineralSand , ore BasalticMineralSand
        StringBuilder buffer = new StringBuilder();
        for (int i = 0; i < splits.size(); i++) {
            buffer.append(splits.get(i));
            // ore -> OrePrefix.ore
            OrePrefix maybePrefix = OrePrefix.getPrefix(buffer.toString());
            // BasalticMineralSand
            String possibleMaterialName = Joiner.on("").join(splits.subList(i + 1, splits.size()));
            // basaltic_mineral_sand
            String underscoreName = GTUtility.toLowerCaseUnderscore(possibleMaterialName);
            // Materials.BasalticSand
            Material possibleMaterial = GregTechAPI.MATERIAL_REGISTRY.getObject(underscoreName);
            if (possibleMaterial == null) {
                // if we didn't found real material, try using marker material registry
                possibleMaterial = markerMaterialRegistry.get(underscoreName);
            }
            if (maybePrefix != null && possibleMaterial != null) {
                orePrefix = maybePrefix;
                material = possibleMaterial;
                break;
            }
        }
    }
    // finally register item
    if (orePrefix != null && (material != null || orePrefix.isSelfReferencing)) {
        UnificationEntry unificationEntry = new UnificationEntry(orePrefix, material);
        ArrayList<ItemAndMetadata> itemListForUnifiedEntry = stackUnificationItems.computeIfAbsent(unificationEntry, p -> new ArrayList<>());
        addAndSort(itemListForUnifiedEntry, simpleItemStack, getSimpleItemStackComparator());
        if (!unificationEntry.orePrefix.isMarkerPrefix()) {
            stackUnificationInfo.put(simpleItemStack, unificationEntry);
        }
        orePrefix.processOreRegistration(material);
    }
}
Also used : java.util(java.util) M(gregtech.api.GTValues.M) Function(java.util.function.Function) ConfigHolder(gregtech.common.ConfigHolder) ItemStack(net.minecraft.item.ItemStack) GregTechAPI(gregtech.api.GregTechAPI) Block(net.minecraft.block.Block) OreDictionary(net.minecraftforge.oredict.OreDictionary) Object2ObjectOpenHashMap(it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap) Material(gregtech.api.unification.material.Material) OrePrefix(gregtech.api.unification.ore.OrePrefix) NonNullList(net.minecraft.util.NonNullList) SimpleEntry(java.util.AbstractMap.SimpleEntry) Nullable(javax.annotation.Nullable) OreRegisterEvent(net.minecraftforge.oredict.OreDictionary.OreRegisterEvent) gregtech.api.unification.stack(gregtech.api.unification.stack) CaseFormat(com.google.common.base.CaseFormat) PropertyKey(gregtech.api.unification.material.properties.PropertyKey) Collectors(java.util.stream.Collectors) CustomModPriorityComparator(gregtech.api.util.CustomModPriorityComparator) MinecraftForge(net.minecraftforge.common.MinecraftForge) MarkerMaterial(gregtech.api.unification.material.MarkerMaterial) SubscribeEvent(net.minecraftforge.fml.common.eventhandler.SubscribeEvent) Entry(java.util.Map.Entry) GTUtility(gregtech.api.util.GTUtility) Joiner(com.google.common.base.Joiner) OrePrefix(gregtech.api.unification.ore.OrePrefix) Material(gregtech.api.unification.material.Material) MarkerMaterial(gregtech.api.unification.material.MarkerMaterial) ItemStack(net.minecraft.item.ItemStack) SubscribeEvent(net.minecraftforge.fml.common.eventhandler.SubscribeEvent)

Aggregations

CaseFormat (com.google.common.base.CaseFormat)2 Joiner (com.google.common.base.Joiner)2 M (gregtech.api.GTValues.M)2 OrePrefix (gregtech.api.unification.ore.OrePrefix)2 gregtech.api.unification.stack (gregtech.api.unification.stack)2 CustomModPriorityComparator (gregtech.api.util.CustomModPriorityComparator)2 ConfigHolder (gregtech.common.ConfigHolder)2 java.util (java.util)2 SimpleEntry (java.util.AbstractMap.SimpleEntry)2 Entry (java.util.Map.Entry)2 Function (java.util.function.Function)2 Collectors (java.util.stream.Collectors)2 Nullable (javax.annotation.Nullable)2 ItemStack (net.minecraft.item.ItemStack)2 NonNullList (net.minecraft.util.NonNullList)2 MinecraftForge (net.minecraftforge.common.MinecraftForge)2 SubscribeEvent (net.minecraftforge.fml.common.eventhandler.SubscribeEvent)2 OreDictionary (net.minecraftforge.oredict.OreDictionary)2 OreRegisterEvent (net.minecraftforge.oredict.OreDictionary.OreRegisterEvent)2 GregTechAPI (gregtech.api.GregTechAPI)1