2019-07-11 22:39:28 +00:00
|
|
|
package org.geysermc.connector.utils;
|
|
|
|
|
2019-07-29 22:20:48 +00:00
|
|
|
import com.fasterxml.jackson.core.type.TypeReference;
|
2019-07-11 22:39:28 +00:00
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
|
import com.nukkitx.network.VarInts;
|
2019-07-17 01:05:10 +00:00
|
|
|
import com.nukkitx.protocol.bedrock.packet.StartGamePacket;
|
2019-07-11 22:39:28 +00:00
|
|
|
import com.nukkitx.protocol.bedrock.v361.BedrockUtils;
|
|
|
|
import io.netty.buffer.ByteBuf;
|
|
|
|
import io.netty.buffer.Unpooled;
|
2019-08-10 03:16:34 +00:00
|
|
|
import org.geysermc.connector.console.GeyserLogger;
|
2019-09-18 02:15:34 +00:00
|
|
|
import org.geysermc.connector.network.translators.block.JavaBlock;
|
2019-07-29 22:20:48 +00:00
|
|
|
import org.geysermc.connector.network.translators.item.BedrockItem;
|
|
|
|
import org.geysermc.connector.network.translators.item.JavaItem;
|
2019-08-30 21:47:33 +00:00
|
|
|
import org.geysermc.connector.world.GlobalBlockPalette;
|
2019-07-11 22:39:28 +00:00
|
|
|
|
|
|
|
import java.io.InputStream;
|
2019-07-17 01:05:10 +00:00
|
|
|
import java.util.*;
|
2019-07-11 22:39:28 +00:00
|
|
|
|
|
|
|
public class Toolbox {
|
|
|
|
|
2019-07-21 22:22:56 +00:00
|
|
|
static {
|
2019-08-06 01:59:54 +00:00
|
|
|
InputStream stream = Toolbox.class.getClassLoader().getResourceAsStream("bedrock/cached_palette.json");
|
2019-07-11 22:39:28 +00:00
|
|
|
ObjectMapper mapper = new ObjectMapper();
|
|
|
|
ArrayList<LinkedHashMap<String, Object>> entries = new ArrayList<>();
|
|
|
|
|
|
|
|
try {
|
|
|
|
entries = mapper.readValue(stream, ArrayList.class);
|
|
|
|
} catch (Exception e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
|
2019-08-10 03:16:34 +00:00
|
|
|
Map<String, BedrockItem> bedrockBlocks = new HashMap<>();
|
2019-07-30 02:25:13 +00:00
|
|
|
Map<String, BedrockItem> bedrockItems = new HashMap<>();
|
2019-08-10 03:16:34 +00:00
|
|
|
|
2019-09-10 23:45:46 +00:00
|
|
|
ByteBuf b = Unpooled.buffer();
|
|
|
|
VarInts.writeUnsignedInt(b, entries.size());
|
2019-07-29 22:20:48 +00:00
|
|
|
for (Map<String, Object> e : entries) {
|
|
|
|
BedrockItem bedrockItem = new BedrockItem((String) e.get("name"), (int) e.get("id"), (int) e.get("data"));
|
2019-09-18 02:15:34 +00:00
|
|
|
bedrockItems.put(bedrockItem.getId() + ":" + bedrockItem.getData(), bedrockItem);
|
|
|
|
bedrockBlocks.put(bedrockItem.getId() + ":" + bedrockItem.getData(), bedrockItem);
|
2019-07-29 22:20:48 +00:00
|
|
|
|
2019-09-08 20:46:10 +00:00
|
|
|
GlobalBlockPalette.registerMapping((int) e.get("id") << 4 | (int) e.get("data"));
|
2019-07-11 22:39:28 +00:00
|
|
|
BedrockUtils.writeString(b, (String) e.get("name"));
|
2019-07-20 22:35:14 +00:00
|
|
|
b.writeShortLE((int) e.get("data"));
|
|
|
|
b.writeShortLE((int) e.get("id"));
|
2019-07-11 22:39:28 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
CACHED_PALLETE = b;
|
|
|
|
|
2019-08-06 01:59:54 +00:00
|
|
|
InputStream stream2 = Toolbox.class.getClassLoader().getResourceAsStream("bedrock/items.json");
|
2019-07-17 01:05:10 +00:00
|
|
|
if (stream2 == null) {
|
|
|
|
throw new AssertionError("Items Table not found");
|
|
|
|
}
|
|
|
|
|
|
|
|
ObjectMapper mapper2 = new ObjectMapper();
|
|
|
|
ArrayList<HashMap> s = new ArrayList<>();
|
|
|
|
try {
|
|
|
|
s = mapper2.readValue(stream2, ArrayList.class);
|
|
|
|
} catch (Exception e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
|
2019-07-29 22:20:48 +00:00
|
|
|
List<StartGamePacket.ItemEntry> l = new ArrayList<>();
|
2019-07-21 22:22:56 +00:00
|
|
|
for (HashMap e : s) {
|
2019-07-20 22:35:14 +00:00
|
|
|
l.add(new StartGamePacket.ItemEntry((String) e.get("name"), (short) ((int) e.get("id"))));
|
2019-09-18 02:15:34 +00:00
|
|
|
if (!bedrockItems.containsKey(e.get("id"))) {
|
2019-07-29 22:20:48 +00:00
|
|
|
BedrockItem bedrockItem = new BedrockItem((String) e.get("name"), ((int) e.get("id")), 0);
|
2019-09-18 02:15:34 +00:00
|
|
|
bedrockItems.put(String.valueOf(bedrockItem.getId()), bedrockItem);
|
2019-07-29 22:20:48 +00:00
|
|
|
}
|
2019-07-17 01:05:10 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
ITEMS = l;
|
2019-07-29 22:20:48 +00:00
|
|
|
|
|
|
|
BEDROCK_ITEMS = bedrockItems;
|
|
|
|
|
2019-08-07 23:08:48 +00:00
|
|
|
InputStream javaItemStream = Toolbox.class.getClassLoader().getResourceAsStream("java/java_items.json");
|
2019-07-29 22:20:48 +00:00
|
|
|
ObjectMapper javaItemMapper = new ObjectMapper();
|
2019-07-30 02:25:13 +00:00
|
|
|
Map<String, HashMap> javaItemList = new HashMap<>();
|
2019-07-29 22:20:48 +00:00
|
|
|
try {
|
|
|
|
javaItemList = javaItemMapper.readValue(javaItemStream, new TypeReference<Map<String, HashMap>>(){});
|
|
|
|
} catch (Exception ex) {
|
|
|
|
ex.printStackTrace();
|
|
|
|
}
|
|
|
|
|
2019-09-18 02:15:34 +00:00
|
|
|
Map<Integer, JavaItem> javaItems = new HashMap<>();
|
2019-07-29 22:20:48 +00:00
|
|
|
|
|
|
|
for (String str : javaItemList.keySet()) {
|
2019-09-18 02:15:34 +00:00
|
|
|
javaItems.put(Integer.parseInt(str), new JavaItem((String) javaItemList.get(str).get("identifier"), Integer.parseInt(str)));
|
2019-07-29 22:20:48 +00:00
|
|
|
}
|
2019-07-31 19:59:23 +00:00
|
|
|
|
2019-07-29 22:20:48 +00:00
|
|
|
JAVA_ITEMS = javaItems;
|
2019-08-07 23:08:48 +00:00
|
|
|
|
|
|
|
InputStream javaItemStream2 = Toolbox.class.getClassLoader().getResourceAsStream("java/java_blocks.json");
|
|
|
|
ObjectMapper javaItemMapper2 = new ObjectMapper();
|
|
|
|
Map<String, HashMap> javaItemList2 = new HashMap<>();
|
|
|
|
try {
|
|
|
|
javaItemList2 = javaItemMapper2.readValue(javaItemStream2, new TypeReference<Map<String, HashMap>>(){});
|
|
|
|
} catch (Exception ex) {
|
|
|
|
ex.printStackTrace();
|
|
|
|
}
|
|
|
|
|
2019-09-18 02:15:34 +00:00
|
|
|
Map<Integer, JavaBlock> javaBlocks = new HashMap<>();
|
2019-08-07 23:08:48 +00:00
|
|
|
|
|
|
|
for (String str : javaItemList2.keySet()) {
|
2019-09-18 02:15:34 +00:00
|
|
|
javaBlocks.put(Integer.parseInt(str), new JavaBlock((String) javaItemList2.get(str).get("identifier"),
|
|
|
|
(String) javaItemList2.get(str).get("data"), Integer.parseInt(str)));
|
2019-08-07 23:08:48 +00:00
|
|
|
}
|
|
|
|
|
2019-08-10 03:16:34 +00:00
|
|
|
JAVA_BLOCKS = javaBlocks;
|
|
|
|
BEDROCK_BLOCKS = bedrockBlocks;
|
2019-08-07 23:08:48 +00:00
|
|
|
|
2019-09-15 23:46:05 +00:00
|
|
|
GeyserLogger.DEFAULT.info("Remapping items...");
|
2019-08-10 03:16:34 +00:00
|
|
|
Remapper.ITEM_REMAPPER.registerConversions(bedrockItems, javaItems);
|
2019-09-15 23:46:05 +00:00
|
|
|
GeyserLogger.DEFAULT.info("Item remap complete!");
|
2019-08-07 23:08:48 +00:00
|
|
|
|
2019-09-18 02:15:34 +00:00
|
|
|
// TODO: Implement support for block data
|
2019-09-15 23:46:05 +00:00
|
|
|
GeyserLogger.DEFAULT.info("Remapping blocks...");
|
2019-08-10 03:16:34 +00:00
|
|
|
Remapper.BLOCK_REMAPPER.registerConversions(bedrockBlocks, javaBlocks);
|
2019-09-15 23:46:05 +00:00
|
|
|
GeyserLogger.DEFAULT.info("Block remap complete!");
|
2019-07-11 22:39:28 +00:00
|
|
|
}
|
|
|
|
|
2019-07-17 01:05:10 +00:00
|
|
|
public static final Collection<StartGamePacket.ItemEntry> ITEMS;
|
|
|
|
|
2019-07-11 22:39:28 +00:00
|
|
|
public static final ByteBuf CACHED_PALLETE;
|
|
|
|
|
2019-07-29 22:20:48 +00:00
|
|
|
public static final Map<String, BedrockItem> BEDROCK_ITEMS;
|
2019-09-18 02:15:34 +00:00
|
|
|
public static final Map<Integer, JavaItem> JAVA_ITEMS;
|
2019-07-29 22:20:48 +00:00
|
|
|
|
2019-08-07 23:08:48 +00:00
|
|
|
public static final Map<String, BedrockItem> BEDROCK_BLOCKS;
|
2019-09-18 02:15:34 +00:00
|
|
|
public static final Map<Integer, JavaBlock> JAVA_BLOCKS;
|
2019-07-11 22:39:28 +00:00
|
|
|
}
|