aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/bwcrossmod/galacticraft/atmosphere/BWAtmosphereManager.java
blob: 0bae6f4546ef7de9b5fa91197c5f20049d780bb4 (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
/*
 * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of
 * this software and associated documentation files (the "Software"), to deal in the Software without restriction,
 * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following
 * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial
 * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 * DEALINGS IN THE SOFTWARE.
 */

package bwcrossmod.galacticraft.atmosphere;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;

import com.google.common.collect.ArrayListMultimap;

import bartworks.system.material.Werkstoff;
import bartworks.system.material.WerkstoffLoader;
import bartworks.util.Pair;
import bwcrossmod.BartWorksCrossmod;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import gregtech.api.enums.Materials;
import gregtech.api.interfaces.ISubTagContainer;
import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody;
import micdoodle8.mods.galacticraft.api.galaxies.GalaxyRegistry;
import micdoodle8.mods.galacticraft.api.world.IAtmosphericGas;

public final class BWAtmosphereManager {

    private static final Map<Integer, Integer[]> COEFFICIENT_MAP = new HashMap<>();

    private BWAtmosphereManager() {
        BWAtmosphereManager.COEFFICIENT_MAP.put(1, new Integer[] { 100 });
        BWAtmosphereManager.COEFFICIENT_MAP.put(2, new Integer[] { 70, 30 });
        BWAtmosphereManager.COEFFICIENT_MAP.put(3, new Integer[] { 60, 25, 15 });
        BWAtmosphereManager.COEFFICIENT_MAP.put(4, new Integer[] { 50, 25, 15, 10 });
        BWAtmosphereManager.COEFFICIENT_MAP.put(5, new Integer[] { 45, 25, 15, 10, 5 });
        BWAtmosphereManager.COEFFICIENT_MAP.put(6, new Integer[] { 45, 20, 15, 10, 5, 5 });
        BWAtmosphereManager.COEFFICIENT_MAP.put(7, new Integer[] { 40, 20, 15, 10, 5, 5, 5 });
        BWAtmosphereManager.COEFFICIENT_MAP.put(8, new Integer[] { 35, 20, 15, 10, 5, 5, 5, 5 });
        BWAtmosphereManager.COEFFICIENT_MAP.put(9, new Integer[] { 35, 15, 15, 10, 5, 5, 5, 5, 5 });
    }

    public static final BWAtmosphereManager INSTANCE = new BWAtmosphereManager();

    private static final ArrayListMultimap<Integer, Pair<ISubTagContainer, Integer>> gasConcentration = ArrayListMultimap
        .create();

    public static List<Pair<ISubTagContainer, Integer>> getGasFromWorldID(int worldID) {
        return BWAtmosphereManager.gasConcentration.get(worldID);
    }

    public static void removeGasFromWorld(int worldID, ISubTagContainer gas) {
        for (Pair<ISubTagContainer, Integer> pair : BWAtmosphereManager.gasConcentration.get(worldID)) {
            if (pair.getKey()
                .equals(gas)) {
                BWAtmosphereManager.gasConcentration.get(worldID)
                    .remove(pair);
                return;
            }
        }
    }

    public static void addGasToWorld(int worldID, ISubTagContainer gas, int amount) {
        Pair<ISubTagContainer, Integer> toadd = new Pair<>(gas, amount);
        BWAtmosphereManager.gasConcentration.put(worldID, toadd);
    }

    public static void addGasToWorld(int worldID, Pair<ISubTagContainer, Integer> toPut) {
        BWAtmosphereManager.gasConcentration.put(worldID, toPut);
    }

    @SafeVarargs
    public static void addGasToWorld(int worldID, Pair<ISubTagContainer, Integer>... toPut) {
        Arrays.stream(toPut)
            .forEach(toadd -> BWAtmosphereManager.gasConcentration.put(worldID, toadd));
    }

    private static boolean addGCGasToWorld(int worldID, IAtmosphericGas gas, int aNumber, int aMaxNumber) {
        if (IAtmosphericGas.CO2.equals(gas)) {
            BWAtmosphereManager.addGasToWorld(
                worldID,
                Materials.CarbonDioxide,
                BWAtmosphereManager.COEFFICIENT_MAP.get(aMaxNumber)[aNumber]);
            return true;
        }
        String name = gas.toString();
        name = name.charAt(0) + name.substring(1)
            .toLowerCase(Locale.US);
        ISubTagContainer mat = Materials.get(name);
        if (mat == Materials._NULL) {
            mat = WerkstoffLoader.getWerkstoff(name);
        }
        if (mat == Werkstoff.default_null_Werkstoff) {
            return false;
        }
        BWAtmosphereManager.addGasToWorld(worldID, mat, BWAtmosphereManager.COEFFICIENT_MAP.get(aMaxNumber)[aNumber]);
        return true;
    }

    @SubscribeEvent
    public void gcAutoRegister(GalaxyRegistry.PlanetRegisterEvent event) {
        CelestialBody planet = GalaxyRegistry.getRegisteredPlanets()
            .get(event.planetName);
        for (int i = 0; i < planet.atmosphere.size(); i++) {
            if (!BWAtmosphereManager
                .addGCGasToWorld(planet.getDimensionID(), planet.atmosphere.get(i), i, planet.atmosphere.size()))
                BartWorksCrossmod.LOGGER.warn(
                    "Unidentified Fluid (" + planet.atmosphere.get(i)
                        + ") in the Atmosphere of: "
                        + planet.getLocalizedName());
        }
    }
}