aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/kubatech/config/Config.java
blob: 86acf47768f77c0a6a7f98966ac1e700eafd0aa2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
/*
 * KubaTech - Gregtech Addon
 * Copyright (C) 2022 - 2023  kuba6000
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 3 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this library. If not, see <https://www.gnu.org/licenses/>.
 *
 */

package kubatech.config;

import java.io.File;
import kubatech.Tags;
import net.minecraftforge.common.config.Configuration;

public class Config {

    private enum Category {
        MOB_HANDLER("MobHandler"),
        DEBUG("Debug");
        final String categoryName;

        Category(String s) {
            categoryName = s;
        }

        public String get() {
            return categoryName;
        }

        @Override
        public String toString() {
            return get();
        }
    }

    public static class MobHandler {

        public static boolean mobHandlerEnabled = true;

        public enum _CacheRegenerationTrigger {
            Never,
            ModAdditionRemoval,
            ModAdditionRemovalChange,
            Always;

            public static _CacheRegenerationTrigger get(int oridinal) {
                return values()[oridinal];
            }
        }

        public static _CacheRegenerationTrigger regenerationTrigger =
                _CacheRegenerationTrigger.ModAdditionRemovalChange;
        public static boolean includeEmptyMobs = true;
        public static String[] mobBlacklist;
        public static double playerOnlyDropsModifier = .1d;

        private static void load(Configuration configuration) {
            Category category = Category.MOB_HANDLER;
            mobHandlerEnabled = configuration
                    .get(
                            category.get(),
                            "Enabled",
                            true,
                            "Enable \"Mob Drops\" NEI page and Extreme Extermination Chamber")
                    .getBoolean();
            StringBuilder c = new StringBuilder("When will cache regeneration trigger? ");
            for (_CacheRegenerationTrigger value : _CacheRegenerationTrigger.values())
                c.append(value.ordinal()).append(" - ").append(value.name()).append(", ");
            regenerationTrigger = _CacheRegenerationTrigger.get(configuration
                    .get(
                            category.get(),
                            "CacheRegenerationTrigger",
                            _CacheRegenerationTrigger.ModAdditionRemovalChange.ordinal(),
                            c.toString())
                    .getInt());
            includeEmptyMobs = configuration
                    .get(category.get(), "IncludeEmptyMobs", true, "Include mobs that have no drops in NEI")
                    .getBoolean();
            mobBlacklist = configuration
                    .get(
                            category.get(),
                            "MobBlacklist",
                            new String[] {
                                "Giant",
                                "Thaumcraft.TravelingTrunk",
                                "chisel.snowman",
                                "OpenBlocks.Luggage",
                                "OpenBlocks.MiniMe",
                                "SpecialMobs.SpecialCreeper",
                                "SpecialMobs.SpecialZombie",
                                "SpecialMobs.SpecialPigZombie",
                                "SpecialMobs.SpecialSlime",
                                "SpecialMobs.SpecialSkeleton",
                                "SpecialMobs.SpecialEnderman",
                                "SpecialMobs.SpecialCaveSpider",
                                "SpecialMobs.SpecialGhast",
                                "SpecialMobs.SpecialWitch",
                                "SpecialMobs.SpecialSpider",
                                "TwilightForest.HydraHead",
                                "TwilightForest.RovingCube",
                                "TwilightForest.Harbinger Cube",
                                "TwilightForest.Adherent",
                                "SpecialMobs.SpecialSilverfish",
                            },
                            "These mobs will be skipped when generating recipe map")
                    .getStringList();
            playerOnlyDropsModifier = configuration
                    .get(
                            category.get(),
                            "PlayerOnlyDropsModifier",
                            .1d,
                            "Hard player only loot (such as core mod drops) will be multiplied by this number")
                    .getDouble();
        }
    }

    public static class Debug {
        public static boolean showRenderErrors = false;

        private static void load(Configuration configuration) {
            Category category = Category.DEBUG;
            showRenderErrors =
                    configuration.get(category.get(), "ShowRenderErrors", false).getBoolean();
        }
    }

    public static File configFile;
    public static File configDirectory;

    public static void init(File configFile) {
        configDirectory = new File(configFile, Tags.MODID);
        Config.configFile = new File(configDirectory, Tags.MODID + ".cfg");
    }

    public static File getConfigFile(String file) {
        return new File(configDirectory, file);
    }

    public static void synchronizeConfiguration() {
        Configuration configuration = new Configuration(configFile);
        configuration.load();

        MobHandler.load(configuration);
        Debug.load(configuration);

        if (configuration.hasChanged()) {
            configuration.save();
        }
    }
}