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());
}
}
}
|