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
|
/*
* Dungeons Guide - The most intelligent Hypixel Skyblock Dungeons Mod
* Copyright (C) 2021 cyoung06
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package kr.syeyoung.dungeonsguide.dungeon.roomfinder;
import com.google.common.io.Files;
import kr.syeyoung.dungeonsguide.Main;
import kr.syeyoung.dungeonsguide.dungeon.data.DungeonRoomInfo;
import net.minecraft.client.Minecraft;
import org.apache.commons.io.IOUtils;
import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import java.io.*;
import java.net.URL;
import java.nio.charset.Charset;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.*;
public class DungeonRoomInfoRegistry {
private static final List<DungeonRoomInfo> registered = new ArrayList<DungeonRoomInfo>();
private static final Map<Short, List<DungeonRoomInfo>> shapeMap = new HashMap<Short, List<DungeonRoomInfo>>();
private static final Map<UUID, DungeonRoomInfo> uuidMap = new HashMap<UUID, DungeonRoomInfo>();
public static void register(DungeonRoomInfo dungeonRoomInfo) {
if (dungeonRoomInfo == null) throw new NullPointerException("what the fak parameter is noll?");
if (uuidMap.containsKey(dungeonRoomInfo.getUuid())) {
DungeonRoomInfo dri1 = uuidMap.get(dungeonRoomInfo.getUuid());
registered.remove(dri1);
shapeMap.get(dri1.getShape()).remove(dri1);
uuidMap.remove(dri1.getUuid());
}
dungeonRoomInfo.setRegistered(true);
registered.add(dungeonRoomInfo);
uuidMap.put(dungeonRoomInfo.getUuid(), dungeonRoomInfo);
List<DungeonRoomInfo> roomInfos = shapeMap.get(dungeonRoomInfo.getShape());
if (roomInfos == null) roomInfos = new ArrayList<DungeonRoomInfo>();
roomInfos.add(dungeonRoomInfo);
shapeMap.put(dungeonRoomInfo.getShape(), roomInfos);
}
public static List<DungeonRoomInfo> getByShape(Short shape) {
List<DungeonRoomInfo> dungeonRoomInfos = shapeMap.get(shape);
return dungeonRoomInfos == null ? Collections.emptyList() : dungeonRoomInfos;
}
public static DungeonRoomInfo getByUUID(UUID uid) {
return uuidMap.get(uid);
}
public static void unregister(DungeonRoomInfo dungeonRoomInfo) {
if (!dungeonRoomInfo.isRegistered()) throw new IllegalStateException("what tha fak? that is not registered one");
if (!uuidMap.containsKey(dungeonRoomInfo.getUuid())) throw new IllegalStateException("what tha fak? that is not registered one, but you desperately wanted to trick this program");
dungeonRoomInfo.setRegistered(false);
registered.remove(dungeonRoomInfo);
shapeMap.get(dungeonRoomInfo.getShape()).remove(dungeonRoomInfo);
uuidMap.remove(dungeonRoomInfo.getUuid());
}
public static void saveAll(File dir) {
dir.mkdirs();
boolean isDev = Minecraft.getMinecraft().getSession().getPlayerID().replace("-","").equals("e686fe0aab804a71ac7011dc8c2b534c");
String nameidstring = "name,uuid,processsor,secrets";
String ids = "";
for (DungeonRoomInfo dungeonRoomInfo : registered) {
try {
if (!dungeonRoomInfo.isUserMade() && !isDev) continue;
FileOutputStream fos = new FileOutputStream(new File(dir, dungeonRoomInfo.getUuid().toString() + ".roomdata"));
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(dungeonRoomInfo);
oos.flush();
oos.close();
nameidstring += "\n"+dungeonRoomInfo.getName()+","+dungeonRoomInfo.getUuid() +","+dungeonRoomInfo.getProcessorId()+","+dungeonRoomInfo.getTotalSecrets();
ids += "roomdata/"+dungeonRoomInfo.getUuid() +".roomdata\n";
} catch (Exception e) {e.printStackTrace();}
}
try {
Files.write(nameidstring, new File(dir, "roomidmapping.csv"), Charset.defaultCharset());
Files.write(ids, new File(dir, "datas.txt"), Charset.defaultCharset());
} catch (IOException e) {
e.printStackTrace();
}
}
public static void loadAll(File dir) throws BadPaddingException, InvalidAlgorithmParameterException, NoSuchAlgorithmException, IOException, IllegalBlockSizeException, NoSuchPaddingException, InvalidKeyException {
registered.clear();
shapeMap.clear();
uuidMap.clear();
try {
List<String> lines = IOUtils.readLines(Main.class.getResourceAsStream("/roomdata/datas.txt"));
for (String name : lines) {
if (!name.endsWith(".roomdata")) continue;
try {
InputStream fis = Main.class.getResourceAsStream("/"+name);
ObjectInputStream ois = new ObjectInputStream(fis);
DungeonRoomInfo dri = (DungeonRoomInfo) ois.readObject();
ois.close();
fis.close();
register(dri);
} catch (Exception e) {
System.out.println(name);
e.printStackTrace();
}
}
} catch (Exception e) {e.printStackTrace();}
for (File f : dir.listFiles()) {
if (!f.getName().endsWith(".roomdata")) continue;
try {
InputStream fis = new FileInputStream(f);
ObjectInputStream ois = new ObjectInputStream(fis);
DungeonRoomInfo dri = (DungeonRoomInfo) ois.readObject();
ois.close();
fis.close();
register(dri);
} catch (Exception e) {
System.out.println(f.getName());e.printStackTrace();}
}
}
}
|