Skip to content

Commit b6602ef

Browse files
authored
fix: formatting; shortening
1 parent 2353dad commit b6602ef

File tree

1 file changed

+126
-119
lines changed

1 file changed

+126
-119
lines changed

src/main/java/net/potato/tuff/ViaBlockIds.java

Lines changed: 126 additions & 119 deletions
Original file line numberDiff line numberDiff line change
@@ -2,240 +2,247 @@
22

33
import com.fasterxml.jackson.databind.ObjectMapper;
44
import com.viaversion.viaversion.api.Via;
5-
import com.viaversion.viaversion.api.protocol.Protocol;
6-
import com.viaversion.viaversion.api.protocol.ProtocolPathEntry;
5+
import com.viaversion.viaversion.api.protocol.*;
76
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
87
import com.viaversion.viabackwards.api.BackwardsProtocol;
98
import com.viaversion.viabackwards.api.data.BackwardsMappingData;
109
import org.bukkit.Bukkit;
1110
import org.bukkit.block.Block;
1211
import org.bukkit.plugin.java.JavaPlugin;
1312
import org.bukkit.scheduler.BukkitRunnable;
14-
import org.bukkit.block.data.BlockData;
15-
16-
import java.io.File;
17-
import java.io.IOException;
18-
import java.io.InputStream;
19-
import java.util.Collections;
20-
import java.util.LinkedHashMap;
21-
import java.util.List;
22-
import java.util.Map;
13+
import org.bukkit.block.data.BlockData;
14+
import java.io.*;
15+
import java.util.*;
2316
import java.util.logging.Level;
17+
import it.unimi.dsi.fastutil.objects.*;
2418

2519
public class ViaBlockIds {
26-
private final JavaPlugin plugin;
27-
private final String serverVersion;
28-
private final File mappingsFile;
29-
private Map<String, int[]> legacyMap = new LinkedHashMap<>();
20+
private final JavaPlugin p;
21+
private final String sv;
22+
private final File mf;
23+
private Object2ObjectOpenHashMap<String, int[]> lm = new Object2ObjectOpenHashMap<>();
3024

31-
public ViaBlockIds(JavaPlugin plugin) {
32-
this.plugin = plugin;
33-
this.serverVersion = getServerMinecraftVersion();
34-
this.mappingsFile = new File(plugin.getDataFolder(), serverVersion + "-mappings.json");
25+
public ViaBlockIds(JavaPlugin pl) {
26+
p = pl;
27+
sv = gsmv();
28+
mf = new File(pl.getDataFolder(), sv + "-mappings.json");
3529

36-
Bukkit.getLogger().info("[TuffX] Server Minecraft Version: " + serverVersion);
30+
Bukkit.getLogger().info("[TuffX] Server Minecraft Version: " + sv);
3731

3832
new BukkitRunnable() {
3933
@Override
4034
public void run() {
41-
initializeMappings();
35+
im();
4236
}
43-
}.runTaskLater(plugin, 1L);
37+
}.runTaskLater(pl, 1L);
4438
}
4539

46-
private void initializeMappings() {
40+
private void im() {
4741
if (Via.getAPI() == null) {
4842
Bukkit.getLogger().severe("[TuffX] ViaVersion API not found! Is ViaVersion installed?");
4943
return;
5044
}
5145

52-
if (!mappingsFile.exists()) {
46+
if (!mf.exists()) {
5347
Bukkit.getLogger().info("[TuffX] Mapping file not found, generating...");
54-
if (!plugin.getDataFolder().exists()) {
55-
plugin.getDataFolder().mkdirs();
48+
if (!p.getDataFolder().exists()) {
49+
p.getDataFolder().mkdirs();
5650
}
57-
generateAndSaveMappings(mappingsFile);
51+
gasm(mf);
5852
} else {
59-
Bukkit.getLogger().info("[TuffX] Loading mappings from " + mappingsFile.getName());
60-
loadMappings(mappingsFile);
53+
Bukkit.getLogger().info("[TuffX] Loading mappings from " + mf.getName());
54+
lm(mf);
6155
}
6256
}
6357

64-
public int[] toLegacy(String blockStateKey) {
65-
return legacyMap.getOrDefault(blockStateKey, new int[]{1, 0});
58+
private static final int[] DEFAULT_LEGACY = {1, 0};
59+
60+
public int[] toLegacy(String k) {
61+
int[] result = lm.get(k);
62+
return result != null ? result : DEFAULT_LEGACY;
6663
}
6764

68-
public int[] toLegacy(Block block) {
69-
String blockKey = block.getBlockData().getAsString().replace("minecraft:", "");
70-
return legacyMap.getOrDefault(blockKey, new int[]{1, 0});
65+
public int[] toLegacy(Block b) {
66+
String k = b.getBlockData().getAsString();
67+
if (k.startsWith("minecraft:")) {
68+
k = k.substring(10);
69+
}
70+
int[] result = lm.get(k);
71+
return result != null ? result : DEFAULT_LEGACY;
7172
}
7273

73-
public int[] toLegacy(BlockData blockData) {
74-
String blockKey = blockData.getAsString().replace("minecraft:", "");
75-
return toLegacy(blockKey);
74+
public int[] toLegacy(BlockData bd) {
75+
String k = bd.getAsString();
76+
if (k.startsWith("minecraft:")) {
77+
k = k.substring(10);
78+
}
79+
int[] result = lm.get(k);
80+
return result != null ? result : DEFAULT_LEGACY;
7681
}
7782

78-
private String getServerMinecraftVersion() {
79-
String versionString = Bukkit.getServer().getVersion();
80-
int mcIndex = versionString.indexOf("MC: ");
81-
if (mcIndex != -1) {
82-
int endIndex = versionString.indexOf(')', mcIndex);
83-
return endIndex != -1 ? versionString.substring(mcIndex + 4, endIndex) : versionString.substring(mcIndex + 4);
83+
private String gsmv() {
84+
String vs = Bukkit.getServer().getVersion();
85+
int mi = vs.indexOf("MC: ");
86+
if (mi != -1) {
87+
int ei = vs.indexOf(')', mi);
88+
return ei != -1 ? vs.substring(mi + 4, ei) : vs.substring(mi + 4);
8489
}
8590
Bukkit.getLogger().warning("[TuffX] Could not detect Minecraft version. Defaulting to 1.21.");
8691
return "1.21";
8792
}
8893

89-
private InputStream findMappingFile() {
90-
String[] versionParts = serverVersion.split("\\.");
94+
private InputStream fmf() {
95+
String[] vp = sv.split("\\.");
9196

92-
int major, minor, patch;
97+
int maj, min, pat;
9398

9499
try {
95-
major = Integer.parseInt(versionParts[0]);
96-
minor = Integer.parseInt(versionParts[1]);
97-
patch = versionParts.length > 2 ? Integer.parseInt(versionParts[2]) : 0;
100+
maj = Integer.parseInt(vp[0]);
101+
min = Integer.parseInt(vp[1]);
102+
pat = vp.length > 2 ? Integer.parseInt(vp[2]) : 0;
98103
} catch (NumberFormatException | ArrayIndexOutOfBoundsException e) {
99-
Bukkit.getLogger().severe("[TuffX] Could not parse server version string: " + serverVersion);
100-
return plugin.getResource("mapping-" + serverVersion + ".json");
104+
Bukkit.getLogger().severe("[TuffX] Could not parse server version string: " + sv);
105+
return p.getResource("mapping-" + sv + ".json");
101106
}
102107

103-
Bukkit.getLogger().info("[TuffX] Searching for mappings, starting from " + serverVersion + " and going down.");
108+
Bukkit.getLogger().info("[TuffX] Searching for mappings, starting from " + sv + " and going down.");
104109

105-
for (int m = minor; m >= 16; m--) {
106-
int startPatch = (m == minor) ? patch : 9;
110+
for (int m = min; m >= 16; m--) {
111+
int sp = (m == min) ? pat : 9;
107112

108-
for (int p = startPatch; p >= 0; p--) {
109-
String versionToTest = major + "." + m + "." + p;
110-
String filename = "mapping-" + versionToTest + ".json";
113+
for (int pt = sp; pt >= 0; pt--) {
114+
String vtt = maj + "." + m + "." + pt;
115+
String fn = "mapping-" + vtt + ".json";
111116

112-
InputStream is = plugin.getResource(filename);
117+
InputStream is = p.getResource(fn);
113118

114119
if (is != null) {
115-
if (!versionToTest.equals(serverVersion)) {
116-
Bukkit.getLogger().info("[TuffX] Using fallback mapping file: " + filename);
120+
if (!vtt.equals(sv)) {
121+
Bukkit.getLogger().info("[TuffX] Using fallback mapping file: " + fn);
117122
} else {
118-
Bukkit.getLogger().info("[TuffX] Found exact mapping file: " + filename);
123+
Bukkit.getLogger().info("[TuffX] Found exact mapping file: " + fn);
119124
}
120125
return is;
121126
}
122127
}
123128

124-
String minorVersionFilename = "mapping-" + major + "." + m + ".json";
125-
InputStream is = plugin.getResource(minorVersionFilename);
129+
String mvfn = "mapping-" + maj + "." + m + ".json";
130+
InputStream is = p.getResource(mvfn);
126131
if (is != null) {
127-
Bukkit.getLogger().info("[TuffX] Using fallback mapping file: " + minorVersionFilename);
132+
Bukkit.getLogger().info("[TuffX] Using fallback mapping file: " + mvfn);
128133
return is;
129134
}
130135
}
131136

132-
Bukkit.getLogger().severe("[TuffX] Could not find any suitable mapping file after checking all versions down to " + major + ".16.0");
137+
Bukkit.getLogger().severe("[TuffX] Could not find any suitable mapping file after checking all versions down to " + maj + ".16.0");
133138
return null;
134139
}
135140

136-
private void generateAndSaveMappings(File file) {
137-
try (InputStream is = findMappingFile()) {
141+
private void gasm(File f) {
142+
try (InputStream is = fmf()) {
138143
if (is == null) {
139-
Bukkit.getLogger().severe("[TuffX] Failed to find mapping-" + serverVersion + ".json in plugin resources!");
144+
Bukkit.getLogger().severe("[TuffX] Failed to find mapping-" + sv + ".json in plugin resources!");
140145
return;
141146
}
142147

143-
ObjectMapper mapper = new ObjectMapper();
144-
Map<String, Object> root = mapper.readValue(is, Map.class);
145-
List<String> states = (List<String>) root.get("blockstates");
148+
ObjectMapper m = new ObjectMapper();
149+
@SuppressWarnings("unchecked")
150+
Map<String, Object> r = m.readValue(is, Map.class);
151+
@SuppressWarnings("unchecked")
152+
List<String> s = (List<String>) r.get("blockstates");
146153

147-
if (states == null) {
154+
if (s == null) {
148155
Bukkit.getLogger().severe("[TuffX] 'blockstates' key not found in JSON.");
149156
return;
150157
}
151158

152-
Map<String, int[]> newLegacyMap = new LinkedHashMap<>();
153-
Bukkit.getLogger().info("[TuffX] Generating legacy mappings for " + states.size() + " block states...");
154-
155-
for (int i = 0; i < states.size(); i++) {
156-
String key = states.get(i).replace("minecraft:", "");
157-
int[] legacy;
158-
legacy = convertToLegacy(i);
159+
Object2ObjectOpenHashMap<String, int[]> nlm = new Object2ObjectOpenHashMap<>();
160+
Bukkit.getLogger().info("[TuffX] Generating legacy mappings for " + s.size() + " block states...");
159161

160-
newLegacyMap.put(key, legacy);
162+
for (int i = 0; i < s.size(); i++) {
163+
String k = s.get(i).replace("minecraft:", "");
164+
int[] l = ctl(i);
165+
nlm.put(k, l);
161166
}
162167

163-
this.legacyMap = newLegacyMap;
168+
lm = nlm;
164169

165-
Map<String, Object> output = new LinkedHashMap<>();
166-
output.put("blockstates", this.legacyMap);
170+
Map<String, Object> o = new Object2ObjectOpenHashMap<>();
171+
o.put("blockstates", lm);
167172

168-
file.getParentFile().mkdirs();
169-
mapper.writerWithDefaultPrettyPrinter().writeValue(file, output);
170-
Bukkit.getLogger().info("[TuffX] Successfully wrote mappings to " + file.getName());
173+
f.getParentFile().mkdirs();
174+
m.writerWithDefaultPrettyPrinter().writeValue(f, o);
175+
Bukkit.getLogger().info("[TuffX] Successfully wrote mappings to " + f.getName());
171176

172177
} catch (Exception e) {
173178
Bukkit.getLogger().log(Level.SEVERE, "[TuffX] Error generating legacy mappings.", e);
174179
}
175180
}
176181

177-
private void loadMappings(File file) {
182+
private void lm(File f) {
178183
try {
179-
ObjectMapper mapper = new ObjectMapper();
180-
Map<String, Object> root = mapper.readValue(file, Map.class);
181-
Map<String, List<Integer>> rawMap = (Map<String, List<Integer>>) root.get("blockstates");
184+
ObjectMapper m = new ObjectMapper();
185+
@SuppressWarnings("unchecked")
186+
Map<String, Object> r = m.readValue(f, Map.class);
187+
@SuppressWarnings("unchecked")
188+
Map<String, List<Integer>> rm = (Map<String, List<Integer>>) r.get("blockstates");
182189

183-
if (rawMap == null) {
190+
if (rm == null) {
184191
Bukkit.getLogger().severe("[TuffX] Invalid format in mappings file. Regenerating...");
185-
generateAndSaveMappings(file);
192+
gasm(f);
186193
return;
187194
}
188195

189-
legacyMap = new LinkedHashMap<>();
190-
for (Map.Entry<String, List<Integer>> entry : rawMap.entrySet()) {
191-
List<Integer> legacyList = entry.getValue();
192-
if (legacyList != null && legacyList.size() == 2) {
193-
legacyMap.put(entry.getKey(), new int[]{legacyList.get(0), legacyList.get(1)});
196+
lm = new Object2ObjectOpenHashMap<>();
197+
for (Map.Entry<String, List<Integer>> e : rm.entrySet()) {
198+
List<Integer> ll = e.getValue();
199+
if (ll != null && ll.size() == 2) {
200+
lm.put(e.getKey(), new int[]{ll.get(0), ll.get(1)});
194201
}
195202
}
196-
Bukkit.getLogger().info("[TuffX] Loaded " + legacyMap.size() + " legacy mappings.");
203+
Bukkit.getLogger().info("[TuffX] Loaded " + lm.size() + " legacy mappings.");
197204
} catch (IOException e) {
198205
Bukkit.getLogger().log(Level.SEVERE, "[TuffX] Failed to load mappings file.", e);
199206
}
200207
}
201208

202-
public int[] convertToLegacy(int modernBlockStateId) {
203-
ProtocolVersion serverProtocol = Via.getAPI().getServerVersion().highestSupportedProtocolVersion();
204-
ProtocolVersion clientProtocol = ProtocolVersion.v1_12_2;
209+
public int[] ctl(int mbsi) {
210+
ProtocolVersion sp = Via.getAPI().getServerVersion().highestSupportedProtocolVersion();
211+
ProtocolVersion cp = ProtocolVersion.v1_12_2;
205212

206-
List<ProtocolPathEntry> path = Via.getManager()
213+
List<ProtocolPathEntry> pt = Via.getManager()
207214
.getProtocolManager()
208215
.getProtocolPath(
209-
clientProtocol.getVersion(),
210-
serverProtocol.getVersion()
216+
cp.getVersion(),
217+
sp.getVersion()
211218
);
212219

213-
if (path == null) {
220+
if (pt == null) {
214221
Bukkit.getLogger().warning("[TuffX] Protocol path is null!");
215222
return new int[]{1, 0};
216223
}
217224

218-
int currentStateId = modernBlockStateId;
225+
int csi = mbsi;
219226

220-
for (int i = path.size() - 1; i >= 0; i--) {
221-
ProtocolPathEntry entry = path.get(i);
222-
Protocol protocol = entry.protocol();
227+
for (int i = pt.size() - 1; i >= 0; i--) {
228+
ProtocolPathEntry e = pt.get(i);
229+
Protocol pr = e.protocol();
223230

224-
if (protocol instanceof BackwardsProtocol) {
225-
BackwardsMappingData mappingData = ((BackwardsProtocol) protocol).getMappingData();
226-
if (mappingData != null && mappingData.getBlockStateMappings() != null) {
227-
int newid = mappingData.getBlockStateMappings().getNewId(currentStateId);
231+
if (pr instanceof BackwardsProtocol) {
232+
BackwardsMappingData md = ((BackwardsProtocol) pr).getMappingData();
233+
if (md != null && md.getBlockStateMappings() != null) {
234+
int ni = md.getBlockStateMappings().getNewId(csi);
228235

229-
if (newid != -1) {
230-
currentStateId = newid;
236+
if (ni != -1) {
237+
csi = ni;
231238
}
232239
}
233240
}
234241
}
235242

236-
int blockId = currentStateId >> 4;
237-
int meta = currentStateId & 0xF;
243+
int bi = csi >> 4;
244+
int mt = csi & 0xF;
238245

239-
return new int[]{blockId, meta};
246+
return new int[]{bi, mt};
240247
}
241-
}
248+
}

0 commit comments

Comments
 (0)