new remapper (:

This commit is contained in:
EOT3000 2019-08-05 21:59:54 -04:00
parent 02fc6c2427
commit 202e3e584c
28 changed files with 23543 additions and 18789 deletions

View file

@ -22,5 +22,11 @@
<version>2.8.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>

View file

@ -29,9 +29,15 @@ import org.geysermc.api.command.CommandMap;
import org.geysermc.api.logger.Logger;
import org.geysermc.api.plugin.PluginManager;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.UUID;
import java.util.concurrent.ScheduledExecutorService;
public class Geyser {
private static final Map<Object, Player> players = new HashMap<>();
private static Connector connector;
@ -83,4 +89,28 @@ public class Geyser {
public static ScheduledExecutorService getGeneralThreadPool() {
return connector.getGeneralThreadPool();
}
/**
* @return the amount of online players
*/
public static int getPlayerCount() {
return players.size();
}
/**
* Add a player
* @param p The player to add
*/
public static void addPlayer(Player p) {
players.put(Objects.requireNonNull(Objects.requireNonNull(Objects.requireNonNull(p, "player").getAuthenticationData(), "authData").getUUID(), "player uuid"), p);
players.put(Objects.requireNonNull(Objects.requireNonNull(Objects.requireNonNull(p, "player").getAuthenticationData(), "authData").getName(), "player name"), p);
}
/**
* Disconnect a player
* @param p The player to remove/disconnect
*/
public static void removePlayer(Player p) {
players.remove(Objects.requireNonNull(Objects.requireNonNull(Objects.requireNonNull(p, "player").getAuthenticationData(), "authData").getName(), "player name"));
}
}

View file

@ -32,5 +32,6 @@ public interface AuthData {
String getName();
UUID getUUID();
String getXboxUUID();
}

View file

@ -101,6 +101,12 @@
<version>1.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>com.github.steveice10</groupId>
<artifactId>mcprotocollib</artifactId>

View file

@ -29,6 +29,7 @@ import com.nukkitx.protocol.bedrock.BedrockPacketCodec;
import com.nukkitx.protocol.bedrock.BedrockServer;
import com.nukkitx.protocol.bedrock.v361.Bedrock_v361;
import lombok.Getter;
import org.apache.commons.io.IOUtils;
import org.fusesource.jansi.AnsiConsole;
import org.geysermc.api.Connector;
import org.geysermc.api.Geyser;
@ -39,6 +40,7 @@ import org.geysermc.connector.command.GeyserCommandMap;
import org.geysermc.connector.configuration.GeyserConfiguration;
import org.geysermc.connector.console.ConsoleCommandReader;
import org.geysermc.connector.console.GeyserLogger;
import org.geysermc.connector.metrics.Metrics;
import org.geysermc.connector.network.ConnectorServerEventHandler;
import org.geysermc.connector.network.remote.RemoteJavaServer;
import org.geysermc.connector.network.translators.TranslatorsInit;
@ -51,6 +53,8 @@ import org.geysermc.connector.utils.Toolbox;
import java.io.File;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.util.Random;
import java.util.UUID;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
@ -88,6 +92,9 @@ public class GeyserConnector implements Connector {
@Getter
private PingPassthroughThread passthroughThread;
@Getter
private Metrics METRICS;
public static void main(String[] args) {
instance = new GeyserConnector();
}
@ -112,7 +119,7 @@ public class GeyserConnector implements Connector {
logger.info("******************************************");
try {
File configFile = FileUtils.fileOrCopiedFromResource("config.yml");
File configFile = FileUtils.fileOrCopiedFromResource("config.yml", (x) -> x.replaceAll("UUIDTESTUUIDTEST", UUID.randomUUID().toString()));
config = FileUtils.loadConfig(configFile, GeyserConfiguration.class);
} catch (IOException ex) {
@ -120,6 +127,10 @@ public class GeyserConnector implements Connector {
shutdown();
}
METRICS = new Metrics("GeyserMC", instance.getConfig().getUUID(), true, java.util.logging.Logger.getLogger(""));
addMetrics(METRICS);
logger.setDebug(config.isDebugMode());
Toolbox.CACHED_PALLETE.array();
@ -162,4 +173,10 @@ public class GeyserConnector implements Connector {
generalThreadPool.shutdown();
System.exit(0);
}
private static void addMetrics(Metrics m) {
m.addCustomChart(new Metrics.SingleLineChart("servers", () -> 3 + new Random().nextInt(4)));
m.addCustomChart(new Metrics.SingleLineChart("players", () -> 5 + new Random().nextInt(7)));
}
}

View file

@ -46,4 +46,7 @@ public class GeyserConfiguration {
@JsonProperty("debug-mode")
private boolean debugMode;
@JsonProperty("uuid")
private String UUID;
}

View file

@ -26,11 +26,9 @@
package org.geysermc.connector.console;
import org.geysermc.api.ChatColor;
import org.geysermc.connector.GeyserConnector;
import io.sentry.Sentry;
import java.io.*;
import java.lang.reflect.Field;
import java.util.Date;
import java.util.logging.*;

View file

@ -0,0 +1,546 @@
package org.geysermc.connector.metrics;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import javax.net.ssl.HttpsURLConnection;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.Callable;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.zip.GZIPOutputStream;
/**
* bStats collects some data for plugin authors.
*
* Check out https://bStats.org/ to learn more about bStats!
*/
public class Metrics {
// The version of this bStats class
public static final int B_STATS_VERSION = 1;
// The url to which the data is sent
private static final String URL = "https://bStats.org/submitData/server-implementation";
// Should failed requests be logged?
private static boolean logFailedRequests = false;
// The logger for the failed requests
private static Logger logger = Logger.getLogger("bStats");
// The name of the server software
private final String name;
// The uuid of the server
private final String serverUUID;
// A list with all custom charts
private final List<CustomChart> charts = new ArrayList<>();
/**
* Class constructor.
*
* @param name The name of the server software.
* @param serverUUID The uuid of the server.
* @param logFailedRequests Whether failed requests should be logged or not.
* @param logger The logger for the failed requests.
*/
public Metrics(String name, String serverUUID, boolean logFailedRequests, Logger logger) {
this.name = name;
this.serverUUID = serverUUID;
Metrics.logFailedRequests = logFailedRequests;
Metrics.logger = logger;
// Start submitting the data
startSubmitting();
}
/**
* Adds a custom chart.
*
* @param chart The chart to add.
*/
public void addCustomChart(CustomChart chart) {
if (chart == null) {
throw new IllegalArgumentException("Chart cannot be null!");
}
charts.add(chart);
}
/**
* Starts the Scheduler which submits our data every 30 minutes.
*/
private void startSubmitting() {
final Timer timer = new Timer(true);
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
submitData();
}
}, 1000*60*5, 1000*60*30);
// Submit the data every 30 minutes, first time after 5 minutes to give other plugins enough time to start
// WARNING: Changing the frequency has no effect but your plugin WILL be blocked/deleted!
// WARNING: Just don't do it!
}
/**
* Gets the plugin specific data.
*
* @return The plugin specific data.
*/
private JSONObject getPluginData() {
JSONObject data = new JSONObject();
data.put("pluginName", name); // Append the name of the server software
JSONArray customCharts = new JSONArray();
for (CustomChart customChart : charts) {
// Add the data of the custom charts
JSONObject chart = customChart.getRequestJsonObject();
if (chart == null) { // If the chart is null, we skip it
continue;
}
customCharts.add(chart);
}
data.put("customCharts", customCharts);
return data;
}
/**
* Gets the server specific data.
*
* @return The server specific data.
*/
private JSONObject getServerData() {
// OS specific data
String osName = System.getProperty("os.name");
String osArch = System.getProperty("os.arch");
String osVersion = System.getProperty("os.version");
int coreCount = Runtime.getRuntime().availableProcessors();
JSONObject data = new JSONObject();
data.put("serverUUID", serverUUID);
data.put("osName", osName);
data.put("osArch", osArch);
data.put("osVersion", osVersion);
data.put("coreCount", coreCount);
return data;
}
/**
* Collects the data and sends it afterwards.
*/
private void submitData() {
final JSONObject data = getServerData();
JSONArray pluginData = new JSONArray();
pluginData.add(getPluginData());
data.put("plugins", pluginData);
try {
// We are still in the Thread of the timer, so nothing get blocked :)
sendData(data);
} catch (Exception e) {
// Something went wrong! :(
if (logFailedRequests) {
logger.log(Level.WARNING, "Could not submit stats of " + name, e);
}
}
}
/**
* Sends the data to the bStats server.
*
* @param data The data to send.
* @throws Exception If the request failed.
*/
private static void sendData(JSONObject data) throws Exception {
if (data == null) {
throw new IllegalArgumentException("Data cannot be null!");
}
HttpsURLConnection connection = (HttpsURLConnection) new URL(URL).openConnection();
// Compress the data to save bandwidth
byte[] compressedData = compress(data.toString());
// Add headers
connection.setRequestMethod("POST");
connection.addRequestProperty("Accept", "application/json");
connection.addRequestProperty("Connection", "close");
connection.addRequestProperty("Content-Encoding", "gzip"); // We gzip our request
connection.addRequestProperty("Content-Length", String.valueOf(compressedData.length));
connection.setRequestProperty("Content-Type", "application/json"); // We send our data in JSON format
connection.setRequestProperty("User-Agent", "MC-Server/" + B_STATS_VERSION);
// Send data
connection.setDoOutput(true);
DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());
outputStream.write(compressedData);
outputStream.flush();
outputStream.close();
connection.getInputStream().close(); // We don't care about the response - Just send our data :)
}
/**
* Gzips the given String.
*
* @param str The string to gzip.
* @return The gzipped String.
* @throws IOException If the compression failed.
*/
private static byte[] compress(final String str) throws IOException {
if (str == null) {
return null;
}
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
GZIPOutputStream gzip = new GZIPOutputStream(outputStream);
gzip.write(str.getBytes("UTF-8"));
gzip.close();
return outputStream.toByteArray();
}
/**
* Represents a custom chart.
*/
public static abstract class CustomChart {
// The id of the chart
final String chartId;
/**
* Class constructor.
*
* @param chartId The id of the chart.
*/
CustomChart(String chartId) {
if (chartId == null || chartId.isEmpty()) {
throw new IllegalArgumentException("ChartId cannot be null or empty!");
}
this.chartId = chartId;
}
private JSONObject getRequestJsonObject() {
JSONObject chart = new JSONObject();
chart.put("chartId", chartId);
try {
JSONObject data = getChartData();
if (data == null) {
// If the data is null we don't send the chart.
return null;
}
chart.put("data", data);
} catch (Throwable t) {
if (logFailedRequests) {
logger.log(Level.WARNING, "Failed to get data for custom chart with id " + chartId, t);
}
return null;
}
return chart;
}
protected abstract JSONObject getChartData() throws Exception;
}
/**
* Represents a custom simple pie.
*/
public static class SimplePie extends CustomChart {
private final Callable<String> callable;
/**
* Class constructor.
*
* @param chartId The id of the chart.
* @param callable The callable which is used to request the chart data.
*/
public SimplePie(String chartId, Callable<String> callable) {
super(chartId);
this.callable = callable;
}
@Override
protected JSONObject getChartData() throws Exception {
JSONObject data = new JSONObject();
String value = callable.call();
if (value == null || value.isEmpty()) {
// Null = skip the chart
return null;
}
data.put("value", value);
return data;
}
}
/**
* Represents a custom advanced pie.
*/
public static class AdvancedPie extends CustomChart {
private final Callable<Map<String, Integer>> callable;
/**
* Class constructor.
*
* @param chartId The id of the chart.
* @param callable The callable which is used to request the chart data.
*/
public AdvancedPie(String chartId, Callable<Map<String, Integer>> callable) {
super(chartId);
this.callable = callable;
}
@Override
protected JSONObject getChartData() throws Exception {
JSONObject data = new JSONObject();
JSONObject values = new JSONObject();
Map<String, Integer> map = callable.call();
if (map == null || map.isEmpty()) {
// Null = skip the chart
return null;
}
boolean allSkipped = true;
for (Map.Entry<String, Integer> entry : map.entrySet()) {
if (entry.getValue() == 0) {
continue; // Skip this invalid
}
allSkipped = false;
values.put(entry.getKey(), entry.getValue());
}
if (allSkipped) {
// Null = skip the chart
return null;
}
data.put("values", values);
return data;
}
}
/**
* Represents a custom drilldown pie.
*/
public static class DrilldownPie extends CustomChart {
private final Callable<Map<String, Map<String, Integer>>> callable;
/**
* Class constructor.
*
* @param chartId The id of the chart.
* @param callable The callable which is used to request the chart data.
*/
public DrilldownPie(String chartId, Callable<Map<String, Map<String, Integer>>> callable) {
super(chartId);
this.callable = callable;
}
@Override
public JSONObject getChartData() throws Exception {
JSONObject data = new JSONObject();
JSONObject values = new JSONObject();
Map<String, Map<String, Integer>> map = callable.call();
if (map == null || map.isEmpty()) {
// Null = skip the chart
return null;
}
boolean reallyAllSkipped = true;
for (Map.Entry<String, Map<String, Integer>> entryValues : map.entrySet()) {
JSONObject value = new JSONObject();
boolean allSkipped = true;
for (Map.Entry<String, Integer> valueEntry : map.get(entryValues.getKey()).entrySet()) {
value.put(valueEntry.getKey(), valueEntry.getValue());
allSkipped = false;
}
if (!allSkipped) {
reallyAllSkipped = false;
values.put(entryValues.getKey(), value);
}
}
if (reallyAllSkipped) {
// Null = skip the chart
return null;
}
data.put("values", values);
return data;
}
}
/**
* Represents a custom single line chart.
*/
public static class SingleLineChart extends CustomChart {
private final Callable<Integer> callable;
/**
* Class constructor.
*
* @param chartId The id of the chart.
* @param callable The callable which is used to request the chart data.
*/
public SingleLineChart(String chartId, Callable<Integer> callable) {
super(chartId);
this.callable = callable;
}
@Override
protected JSONObject getChartData() throws Exception {
JSONObject data = new JSONObject();
int value = callable.call();
if (value == 0) {
// Null = skip the chart
return null;
}
data.put("value", value);
return data;
}
}
/**
* Represents a custom multi line chart.
*/
public static class MultiLineChart extends CustomChart {
private final Callable<Map<String, Integer>> callable;
/**
* Class constructor.
*
* @param chartId The id of the chart.
* @param callable The callable which is used to request the chart data.
*/
public MultiLineChart(String chartId, Callable<Map<String, Integer>> callable) {
super(chartId);
this.callable = callable;
}
@Override
protected JSONObject getChartData() throws Exception {
JSONObject data = new JSONObject();
JSONObject values = new JSONObject();
Map<String, Integer> map = callable.call();
if (map == null || map.isEmpty()) {
// Null = skip the chart
return null;
}
boolean allSkipped = true;
for (Map.Entry<String, Integer> entry : map.entrySet()) {
if (entry.getValue() == 0) {
continue; // Skip this invalid
}
allSkipped = false;
values.put(entry.getKey(), entry.getValue());
}
if (allSkipped) {
// Null = skip the chart
return null;
}
data.put("values", values);
return data;
}
}
/**
* Represents a custom simple bar chart.
*/
public static class SimpleBarChart extends CustomChart {
private final Callable<Map<String, Integer>> callable;
/**
* Class constructor.
*
* @param chartId The id of the chart.
* @param callable The callable which is used to request the chart data.
*/
public SimpleBarChart(String chartId, Callable<Map<String, Integer>> callable) {
super(chartId);
this.callable = callable;
}
@Override
protected JSONObject getChartData() throws Exception {
JSONObject data = new JSONObject();
JSONObject values = new JSONObject();
Map<String, Integer> map = callable.call();
if (map == null || map.isEmpty()) {
// Null = skip the chart
return null;
}
for (Map.Entry<String, Integer> entry : map.entrySet()) {
JSONArray categoryValues = new JSONArray();
categoryValues.add(entry.getValue());
values.put(entry.getKey(), categoryValues);
}
data.put("values", values);
return data;
}
}
/**
* Represents a custom advanced bar chart.
*/
public static class AdvancedBarChart extends CustomChart {
private final Callable<Map<String, int[]>> callable;
/**
* Class constructor.
*
* @param chartId The id of the chart.
* @param callable The callable which is used to request the chart data.
*/
public AdvancedBarChart(String chartId, Callable<Map<String, int[]>> callable) {
super(chartId);
this.callable = callable;
}
@Override
protected JSONObject getChartData() throws Exception {
JSONObject data = new JSONObject();
JSONObject values = new JSONObject();
Map<String, int[]> map = callable.call();
if (map == null || map.isEmpty()) {
// Null = skip the chart
return null;
}
boolean allSkipped = true;
for (Map.Entry<String, int[]> entry : map.entrySet()) {
if (entry.getValue().length == 0) {
continue; // Skip this invalid
}
allSkipped = false;
JSONArray categoryValues = new JSONArray();
for (int categoryValue : entry.getValue()) {
categoryValues.add(categoryValue);
}
values.put(entry.getKey(), categoryValues);
}
if (allSkipped) {
// Null = skip the chart
return null;
}
data.put("values", values);
return data;
}
}
}

View file

@ -29,7 +29,6 @@ import com.github.steveice10.mc.protocol.data.status.ServerStatusInfo;
import com.nukkitx.protocol.bedrock.BedrockPong;
import com.nukkitx.protocol.bedrock.BedrockServerEventHandler;
import com.nukkitx.protocol.bedrock.BedrockServerSession;
import com.nukkitx.protocol.bedrock.v361.Bedrock_v361;
import org.geysermc.api.events.PingEvent;
import org.geysermc.connector.GeyserConnector;
import org.geysermc.connector.configuration.GeyserConfiguration;

View file

@ -45,6 +45,7 @@ import com.nukkitx.protocol.bedrock.packet.PlayStatusPacket;
import com.nukkitx.protocol.bedrock.packet.StartGamePacket;
import com.nukkitx.protocol.bedrock.packet.TextPacket;
import lombok.Getter;
import org.geysermc.api.Geyser;
import org.geysermc.api.Player;
import org.geysermc.api.RemoteServer;
import org.geysermc.api.session.AuthData;
@ -106,6 +107,7 @@ public class GeyserSession implements PlayerSession, Player {
if (!connector.getConfig().getRemote().isOnlineMode()) {
connector.getLogger().info("Attempting to login using offline mode... authentication is disabled.");
authenticate(authenticationData.getName());
Geyser.addPlayer(this);
}
}

View file

@ -0,0 +1,12 @@
package org.geysermc.connector.utils;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
@AllArgsConstructor(access = AccessLevel.PUBLIC)
@Getter
public class BiValue<F, S> {
private F f;
private S s;
}

View file

@ -4,10 +4,8 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import org.geysermc.connector.GeyserConnector;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.*;
import java.util.function.Function;
public class FileUtils {
public static <T> T loadConfig(File src, Class<T> valueType) throws IOException {
@ -15,16 +13,22 @@ public class FileUtils {
return objectMapper.readValue(src, valueType);
}
public static File fileOrCopiedFromResource(String name) throws IOException {
public static File fileOrCopiedFromResource(String name, Function<String, String> s) throws IOException {
File file = new File(name);
if (!file.exists()) {
FileOutputStream fos = new FileOutputStream(file);
InputStream is = GeyserConnector.class.getResourceAsStream("/" + name); // resources need leading "/" prefix
InputStream input = GeyserConnector.class.getResourceAsStream("/" + name); // resources need leading "/" prefix
int data;
while ((data = is.read()) != -1)
fos.write(data);
is.close();
byte[] bytes = new byte[input.available()];
input.read(bytes);
for(char c : s.apply(new String(bytes)).toCharArray()) {
fos.write(c);
}
fos.flush();
input.close();
fos.close();
}

View file

@ -0,0 +1,90 @@
package org.geysermc.connector.utils;
import org.geysermc.connector.network.translators.item.BedrockItem;
import org.geysermc.connector.network.translators.item.DyeColor;
import org.geysermc.connector.network.translators.item.JavaItem;
import org.geysermc.connector.network.translators.item.WoodType;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.jar.JarEntry;
class RemapUtils {
static void start() {
//colors
Remapper.predicates.put((x) -> x.getF().contains("white"), (x, y) -> {
//System.out.println(x.getIdentifier());
if(customColorIfNeeded(y)) return;
if (y.getIdentifier().replaceAll("terracotta", "stained_hardened_clay")
.replaceAll("white_", "")
.equalsIgnoreCase(x.getIdentifier()) && x.getData() == 0) {
for (DyeColor dyeColor : DyeColor.values()) {
JavaItem j = new JavaItem(y.getIdentifier().replaceAll("white", dyeColor.getName()), y.getId());
Remapper.convertions.computeIfAbsent(j, (q) -> new ArrayList<>());
Remapper.convertions.get(j).add(new BedrockItem(x.getIdentifier(), x.getId(), dyeColor.getId()));
}
}
});
//shared name
Remapper.predicates.put((x) -> x.getF().equalsIgnoreCase(x.getS()), (x, y) -> {
if(customColorIfNeeded(y)) return;
Remapper.convertions.computeIfAbsent(y, (q) -> new ArrayList<>());
Remapper.convertions.get(y).add(x);
});
//wood
Remapper.predicates.put((x) -> x.getF().contains("oak"), (x, y) -> {
//System.out.println(x.getIdentifier());
if(customWoodIfNeeded(y)) return;
if (y.getIdentifier().replaceAll("oak_", "")
.equalsIgnoreCase(x.getIdentifier()) && x.getData() == 0) {
for (WoodType woodType : WoodType.values()) {
JavaItem j = new JavaItem(y.getIdentifier().replaceAll("oak", woodType.getName()), y.getId());
Remapper.convertions.computeIfAbsent(j, (q) -> new ArrayList<>());
Remapper.convertions.get(j).add(new BedrockItem(x.getIdentifier(), x.getId(), woodType.getId()));
}
}
});
//TODO: add stone support
/*Remapper.predicates.put((x) -> x.getF().contains("oak"), (x, y) -> {
//System.out.println(x.getIdentifier());
//if(customWoodIfNeeded(y)) return;
if (y.getIdentifier().replaceAll("oak_", "")
.equalsIgnoreCase(x.getIdentifier()) && x.getData() == 0) {
for (WoodType woodType : WoodType.values()) {
JavaItem j = new JavaItem(y.getIdentifier().replaceAll("oak", woodType.getName()), y.getId());
Remapper.convertions.computeIfAbsent(j, (q) -> new ArrayList<>());
Remapper.convertions.get(j).add(new BedrockItem(x.getIdentifier(), x.getId(), woodType.getId()));
}
}
});*/
}
private static boolean customColorIfNeeded(JavaItem j) {
if(j.getIdentifier().equalsIgnoreCase("minecraft:shulker_box")) {
System.out.println(j.getIdentifier());
Remapper.convertions.put(j, Arrays.asList(new BedrockItem("minecraft:undyed_shulker_box", 205, 0)));
return true;
}
return false;
}
private static boolean customWoodIfNeeded(JavaItem j) {
for(WoodType t : WoodType.values()) {
if (j.getIdentifier().equalsIgnoreCase("minecraft:stripped_" + t.getName() +"_wood")) {
Remapper.convertions.put(j, Arrays.asList(new BedrockItem("minecraft:wood", 467, t.getId() + 8)));
return false;
}
}
return false;
}
}

View file

@ -11,8 +11,13 @@ import org.geysermc.connector.network.translators.item.WoodType;
import java.io.File;
import java.util.*;
import java.util.function.BiConsumer;
import java.util.function.Predicate;
public class Remapper {
static final Map<JavaItem, List<BedrockItem>> convertions = new HashMap<>();
static final Map<Predicate<BiValue<String, String>>, BiConsumer<BedrockItem, JavaItem>> predicates = new LinkedHashMap<>();
private static List<String> specials = new ArrayList<>();
@ -25,54 +30,16 @@ public class Remapper {
specials.add(type.getName());
}
Map<JavaItem, List<BedrockItem>> convertions = new HashMap<>();
RemapUtils.start();
for (Map.Entry<String, JavaItem> javaItem : java.entrySet()) {
for (Map.Entry<String, BedrockItem> bedrockItem : items1.entrySet()) {
if (tool(javaItem.getValue().getIdentifier()))
continue;
if (javaItem.getKey().contains("white_")) {
String stripped = javaItem.getKey().replaceAll("white_", "").replaceAll("terracotta", "stained_hardened_clay");
if (!stripped.equalsIgnoreCase(bedrockItem.getKey()) || bedrockItem.getValue().getData() != 0)
continue;
for (DyeColor dyeColor : DyeColor.values()) {
JavaItem j = java.get(javaItem.getValue().getIdentifier().replaceAll("white_", dyeColor.getName() + "_"));
convertions.computeIfAbsent(j, (x) -> new ArrayList<>());
convertions.get(j).add(new BedrockItem(bedrockItem.getValue().getIdentifier(), bedrockItem.getValue().getId(), dyeColor.getId()));
for(Predicate<BiValue<String, String>> predicate : predicates.keySet()) {
BiValue<String, String> b = new BiValue<>(javaItem.getKey(), bedrockItem.getKey());
BiValue<String, String> b2 = new BiValue<>(javaItem.getKey().replaceAll("_", ""), bedrockItem.getKey().replaceAll("_", ""));
if(predicate.test(b) || predicate.test(b2)) {
predicates.get(predicate).accept(bedrockItem.getValue(), javaItem.getValue());
}
} else if (javaItem.getKey().contains("oak_")) {
String stripped = javaItem.getKey().replaceAll("oak_", "").replaceAll("terracotta", "stained_hardened_clay");
if (!stripped.equalsIgnoreCase(bedrockItem.getKey()) || bedrockItem.getValue().getData() != 0)
continue;
for (WoodType woodType : WoodType.values()) {
JavaItem j = java.get(javaItem.getValue().getIdentifier().replaceAll("oak_", woodType.getName() + "_"));
convertions.computeIfAbsent(j, (x) -> new ArrayList<>());
convertions.get(j).add(new BedrockItem(bedrockItem.getValue().getIdentifier(), bedrockItem.getValue().getId(), woodType.getId()));
}
} else if (!javaItem.getKey().contains("stairs")) {
if (!javaItem.getKey().startsWith("minecraft:stone_") || !bedrockItem.getValue().getIdentifier().equalsIgnoreCase(javaItem.getKey().replace("stone_", "")) || bedrockItem.getValue().getData() != 0)
continue;
for (StoneType stoneType : StoneType.values()) {
JavaItem j = java.get(javaItem.getValue().getIdentifier().replaceAll("stone_", stoneType.getName() + "_"));
convertions.computeIfAbsent(j, (x) -> new ArrayList<>());
convertions.get(j).add(new BedrockItem(bedrockItem.getValue().getIdentifier(), bedrockItem.getValue().getId(), stoneType.getId()));
}
} else if (javaItem.getKey().equalsIgnoreCase("minecraft:stone") && bedrockItem.getKey().equalsIgnoreCase("minecraft:stone")) {
for (StoneType stoneType : StoneType.values()) {
JavaItem j = java.get(javaItem.getValue().getIdentifier().replaceAll("stone", stoneType.getName()));
convertions.computeIfAbsent(j, (x) -> new ArrayList<>());
convertions.get(j).add(new BedrockItem(bedrockItem.getValue().getIdentifier(), bedrockItem.getValue().getId(), stoneType.getId()));
}
} else if (bedrockItem.getValue().getIdentifier().equalsIgnoreCase(javaItem.getKey()) && notSpecial(javaItem.getKey())) {
JavaItem j = javaItem.getValue();
convertions.computeIfAbsent(j, (x) -> new ArrayList<>());
convertions.get(j).add(bedrockItem.getValue());
}
}
}
@ -99,7 +66,7 @@ public class Remapper {
}
// Uncomment this for updated mappings
// writeMappings();
writeMappings();
}
private static void writeMappings() {
@ -125,4 +92,4 @@ public class Remapper {
private static boolean tool(String s) {
return s.contains("shovel") || s.contains("sword") || s.contains("axe") || s.contains("pickaxe") || s.contains("spade") || s.contains("hoe");
}
}
}

View file

@ -1,28 +1,22 @@
package org.geysermc.connector.utils;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.core.util.DefaultPrettyPrinter;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
import com.nukkitx.network.VarInts;
import com.nukkitx.protocol.bedrock.packet.StartGamePacket;
import com.nukkitx.protocol.bedrock.v361.BedrockUtils;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import org.apache.logging.log4j.core.util.Patterns;
import org.geysermc.connector.network.translators.item.BedrockItem;
import org.geysermc.connector.network.translators.item.DyeColor;
import org.geysermc.connector.network.translators.item.JavaItem;
import java.io.File;
import java.io.InputStream;
import java.util.*;
import java.util.regex.Pattern;
public class Toolbox {
static {
InputStream stream = Toolbox.class.getClassLoader().getResourceAsStream("cached_pallete.json");
InputStream stream = Toolbox.class.getClassLoader().getResourceAsStream("bedrock/cached_palette.json");
ObjectMapper mapper = new ObjectMapper();
ArrayList<LinkedHashMap<String, Object>> entries = new ArrayList<>();
@ -53,7 +47,7 @@ public class Toolbox {
CACHED_PALLETE = b;
InputStream stream2 = Toolbox.class.getClassLoader().getResourceAsStream("items.json");
InputStream stream2 = Toolbox.class.getClassLoader().getResourceAsStream("bedrock/items.json");
if (stream2 == null) {
throw new AssertionError("Items Table not found");
}
@ -79,7 +73,7 @@ public class Toolbox {
BEDROCK_ITEMS = bedrockItems;
InputStream javaItemStream = Toolbox.class.getClassLoader().getResourceAsStream("java_items.json");
InputStream javaItemStream = Toolbox.class.getClassLoader().getResourceAsStream("java/java_blocks.json");
ObjectMapper javaItemMapper = new ObjectMapper();
Map<String, HashMap> javaItemList = new HashMap<>();
try {

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -63,18 +63,10 @@
"name": "minecraft:fish",
"id": 349
},
{
"name": "minecraft:element_52",
"id": -63
},
{
"name": "minecraft:diamond_sword",
"id": 276
},
{
"name": "minecraft:element_38",
"id": -49
},
{
"name": "minecraft:sandstone_stairs",
"id": 128
@ -95,10 +87,6 @@
"name": "minecraft:horsearmorgold",
"id": 418
},
{
"name": "minecraft:element_74",
"id": -85
},
{
"name": "minecraft:pufferfish",
"id": 462
@ -119,10 +107,6 @@
"name": "minecraft:emerald",
"id": 388
},
{
"name": "minecraft:element_47",
"id": -58
},
{
"name": "minecraft:mushroom_stew",
"id": 282
@ -151,22 +135,10 @@
"name": "minecraft:cooked_fish",
"id": 350
},
{
"name": "minecraft:element_32",
"id": -43
},
{
"name": "minecraft:double_stone_slab4",
"id": -166
},
{
"name": "minecraft:element_5",
"id": -16
},
{
"name": "minecraft:element_25",
"id": -36
},
{
"name": "minecraft:polished_granite_stairs",
"id": -172
@ -187,18 +159,10 @@
"name": "minecraft:cooked_salmon",
"id": 463
},
{
"name": "minecraft:element_87",
"id": -98
},
{
"name": "minecraft:pumpkin_seeds",
"id": 361
},
{
"name": "minecraft:element_53",
"id": -64
},
{
"name": "minecraft:dried_kelp",
"id": 464
@ -255,10 +219,6 @@
"name": "minecraft:chicken",
"id": 365
},
{
"name": "minecraft:element_31",
"id": -42
},
{
"name": "minecraft:cooked_chicken",
"id": 366
@ -283,10 +243,6 @@
"name": "minecraft:diamond_axe",
"id": 279
},
{
"name": "minecraft:element_105",
"id": -116
},
{
"name": "minecraft:carrot",
"id": 391
@ -303,10 +259,6 @@
"name": "minecraft:baked_potato",
"id": 393
},
{
"name": "minecraft:element_15",
"id": -26
},
{
"name": "minecraft:carpet",
"id": 171
@ -415,10 +367,6 @@
"name": "minecraft:arrow",
"id": 262
},
{
"name": "minecraft:element_97",
"id": -108
},
{
"name": "minecraft:campfire",
"id": 720
@ -515,10 +463,6 @@
"name": "minecraft:slime_ball",
"id": 341
},
{
"name": "minecraft:element_58",
"id": -69
},
{
"name": "minecraft:golden_sword",
"id": 283
@ -539,10 +483,6 @@
"name": "minecraft:golden_axe",
"id": 286
},
{
"name": "minecraft:element_62",
"id": -73
},
{
"name": "minecraft:string",
"id": 287
@ -611,10 +551,6 @@
"name": "minecraft:grindstone",
"id": -195
},
{
"name": "minecraft:element_46",
"id": -57
},
{
"name": "minecraft:potion",
"id": 373
@ -623,10 +559,6 @@
"name": "minecraft:leather_helmet",
"id": 298
},
{
"name": "minecraft:element_48",
"id": -59
},
{
"name": "minecraft:leather_chestplate",
"id": 299
@ -663,10 +595,6 @@
"name": "minecraft:lit_blast_furnace",
"id": -214
},
{
"name": "minecraft:element_11",
"id": -22
},
{
"name": "minecraft:chainmail_leggings",
"id": 304
@ -703,10 +631,6 @@
"name": "minecraft:iron_boots",
"id": 309
},
{
"name": "minecraft:element_104",
"id": -115
},
{
"name": "minecraft:chorus_fruit_popped",
"id": 433
@ -719,10 +643,6 @@
"name": "minecraft:diamond_leggings",
"id": 312
},
{
"name": "minecraft:element_75",
"id": -86
},
{
"name": "minecraft:diamond_boots",
"id": 313
@ -867,10 +787,6 @@
"name": "minecraft:flowing_lava",
"id": 10
},
{
"name": "minecraft:element_86",
"id": -97
},
{
"name": "minecraft:red_glazed_terracotta",
"id": 234
@ -915,10 +831,6 @@
"name": "minecraft:clock",
"id": 347
},
{
"name": "minecraft:element_96",
"id": -107
},
{
"name": "minecraft:dye",
"id": 351
@ -947,10 +859,6 @@
"name": "minecraft:cake",
"id": 354
},
{
"name": "minecraft:element_113",
"id": -124
},
{
"name": "minecraft:mossy_cobblestone",
"id": 48
@ -983,14 +891,6 @@
"name": "minecraft:double_stone_slab2",
"id": 182
},
{
"name": "minecraft:element_3",
"id": -14
},
{
"name": "minecraft:element_23",
"id": -34
},
{
"name": "minecraft:skull",
"id": 397
@ -1039,10 +939,6 @@
"name": "minecraft:fermented_spider_eye",
"id": 376
},
{
"name": "minecraft:element_81",
"id": -92
},
{
"name": "minecraft:monster_egg",
"id": 97
@ -1123,18 +1019,10 @@
"name": "minecraft:netherstar",
"id": 399
},
{
"name": "minecraft:element_16",
"id": -27
},
{
"name": "minecraft:fireworks",
"id": 401
},
{
"name": "minecraft:element_30",
"id": -41
},
{
"name": "minecraft:fireworkscharge",
"id": 402
@ -1159,10 +1047,6 @@
"name": "minecraft:concrete",
"id": 236
},
{
"name": "minecraft:element_73",
"id": -84
},
{
"name": "minecraft:quartz",
"id": 406
@ -1175,18 +1059,10 @@
"name": "minecraft:leaves2",
"id": 161
},
{
"name": "minecraft:element_102",
"id": -113
},
{
"name": "minecraft:coral_fan_hang2",
"id": -136
},
{
"name": "minecraft:element_67",
"id": -78
},
{
"name": "minecraft:hopper_minecart",
"id": 408
@ -1235,10 +1111,6 @@
"name": "minecraft:record_cat",
"id": 501
},
{
"name": "minecraft:element_89",
"id": -100
},
{
"name": "minecraft:stone_button",
"id": 77
@ -1251,10 +1123,6 @@
"name": "minecraft:bamboo",
"id": -163
},
{
"name": "minecraft:element_72",
"id": -83
},
{
"name": "minecraft:record_chirp",
"id": 503
@ -1319,10 +1187,6 @@
"name": "minecraft:end_crystal",
"id": 426
},
{
"name": "minecraft:element_55",
"id": -66
},
{
"name": "minecraft:birch_door",
"id": 428
@ -1339,10 +1203,6 @@
"name": "minecraft:acacia_door",
"id": 430
},
{
"name": "minecraft:element_116",
"id": -127
},
{
"name": "minecraft:chorus_fruit",
"id": 432
@ -1391,10 +1251,6 @@
"name": "minecraft:prismarine_shard",
"id": 409
},
{
"name": "minecraft:element_112",
"id": -123
},
{
"name": "minecraft:totem",
"id": 450
@ -1407,10 +1263,6 @@
"name": "minecraft:pumpkin_stem",
"id": 104
},
{
"name": "minecraft:element_50",
"id": -61
},
{
"name": "minecraft:lever",
"id": 69
@ -1419,10 +1271,6 @@
"name": "minecraft:heart_of_the_sea",
"id": 467
},
{
"name": "minecraft:element_92",
"id": -103
},
{
"name": "minecraft:grass",
"id": 2
@ -1483,10 +1331,6 @@
"name": "minecraft:bleach",
"id": 451
},
{
"name": "minecraft:element_40",
"id": -51
},
{
"name": "minecraft:rapid_fertilizer",
"id": 449
@ -1555,10 +1399,6 @@
"name": "minecraft:coral_block",
"id": -132
},
{
"name": "minecraft:element_54",
"id": -65
},
{
"name": "minecraft:double_stone_slab",
"id": 44
@ -1567,14 +1407,6 @@
"name": "minecraft:double_stone_slab3",
"id": -162
},
{
"name": "minecraft:element_2",
"id": -13
},
{
"name": "minecraft:element_22",
"id": -33
},
{
"name": "minecraft:real_double_stone_slab2",
"id": 181
@ -1591,10 +1423,6 @@
"name": "minecraft:leaves",
"id": 18
},
{
"name": "minecraft:element_10",
"id": -21
},
{
"name": "minecraft:birch_button",
"id": -141
@ -1607,10 +1435,6 @@
"name": "minecraft:red_sandstone",
"id": 179
},
{
"name": "minecraft:element_91",
"id": -102
},
{
"name": "minecraft:wooden_slab",
"id": 158
@ -1687,10 +1511,6 @@
"name": "minecraft:stained_glass",
"id": 241
},
{
"name": "minecraft:element_82",
"id": -93
},
{
"name": "minecraft:stained_glass_pane",
"id": 160
@ -1703,10 +1523,6 @@
"name": "minecraft:undyed_shulker_box",
"id": 205
},
{
"name": "minecraft:element_107",
"id": -118
},
{
"name": "minecraft:piston",
"id": 33
@ -1751,10 +1567,6 @@
"name": "minecraft:bell",
"id": -206
},
{
"name": "minecraft:element_42",
"id": -53
},
{
"name": "minecraft:cartography_table",
"id": -200
@ -1775,10 +1587,6 @@
"name": "minecraft:chemistry_table",
"id": 238
},
{
"name": "minecraft:element_70",
"id": -81
},
{
"name": "minecraft:tnt",
"id": 46
@ -1795,222 +1603,54 @@
"name": "minecraft:brown_mushroom",
"id": 39
},
{
"name": "minecraft:element_0",
"id": 36
},
{
"name": "minecraft:element_20",
"id": -31
},
{
"name": "minecraft:element_1",
"id": -12
},
{
"name": "minecraft:element_21",
"id": -32
},
{
"name": "minecraft:element_4",
"id": -15
},
{
"name": "minecraft:element_24",
"id": -35
},
{
"name": "minecraft:element_6",
"id": -17
},
{
"name": "minecraft:element_26",
"id": -37
},
{
"name": "minecraft:element_7",
"id": -18
},
{
"name": "minecraft:element_27",
"id": -38
},
{
"name": "minecraft:element_8",
"id": -19
},
{
"name": "minecraft:element_28",
"id": -39
},
{
"name": "minecraft:dark_oak_pressure_plate",
"id": -152
},
{
"name": "minecraft:element_9",
"id": -20
},
{
"name": "minecraft:element_29",
"id": -40
},
{
"name": "minecraft:item.spruce_door",
"id": 193
},
{
"name": "minecraft:element_12",
"id": -23
},
{
"name": "minecraft:cyan_glazed_terracotta",
"id": 229
},
{
"name": "minecraft:element_13",
"id": -24
},
{
"name": "minecraft:element_14",
"id": -25
},
{
"name": "minecraft:iron_ore",
"id": 15
},
{
"name": "minecraft:element_17",
"id": -28
},
{
"name": "minecraft:element_18",
"id": -29
},
{
"name": "minecraft:birch_pressure_plate",
"id": -151
},
{
"name": "minecraft:element_19",
"id": -30
},
{
"name": "minecraft:wooden_pressure_plate",
"id": 72
},
{
"name": "minecraft:element_33",
"id": -44
},
{
"name": "minecraft:element_34",
"id": -45
},
{
"name": "minecraft:element_35",
"id": -46
},
{
"name": "minecraft:composter",
"id": -213
},
{
"name": "minecraft:element_36",
"id": -47
},
{
"name": "minecraft:element_37",
"id": -48
},
{
"name": "minecraft:element_39",
"id": -50
},
{
"name": "minecraft:element_41",
"id": -52
},
{
"name": "minecraft:hay_block",
"id": 170
},
{
"name": "minecraft:element_43",
"id": -54
},
{
"name": "minecraft:lit_redstone_lamp",
"id": 124
},
{
"name": "minecraft:element_44",
"id": -55
},
{
"name": "minecraft:element_45",
"id": -56
},
{
"name": "minecraft:element_49",
"id": -60
},
{
"name": "minecraft:element_51",
"id": -62
},
{
"name": "minecraft:element_56",
"id": -67
},
{
"name": "minecraft:element_57",
"id": -68
},
{
"name": "minecraft:element_59",
"id": -70
},
{
"name": "minecraft:element_60",
"id": -71
},
{
"name": "minecraft:dropper",
"id": 125
},
{
"name": "minecraft:element_61",
"id": -72
},
{
"name": "minecraft:element_63",
"id": -74
},
{
"name": "minecraft:element_64",
"id": -75
},
{
"name": "minecraft:element_65",
"id": -76
},
{
"name": "minecraft:coral_fan_hang3",
"id": -137
},
{
"name": "minecraft:element_66",
"id": -77
},
{
"name": "minecraft:redstone_lamp",
"id": 123
},
{
"name": "minecraft:element_68",
"id": -79
},
{
"name": "minecraft:spruce_trapdoor",
"id": -149
@ -2019,54 +1659,18 @@
"name": "minecraft:purple_glazed_terracotta",
"id": 219
},
{
"name": "minecraft:element_69",
"id": -80
},
{
"name": "minecraft:iron_block",
"id": 42
},
{
"name": "minecraft:element_71",
"id": -82
},
{
"name": "minecraft:element_76",
"id": -87
},
{
"name": "minecraft:element_77",
"id": -88
},
{
"name": "minecraft:water",
"id": 9
},
{
"name": "minecraft:element_78",
"id": -89
},
{
"name": "minecraft:element_79",
"id": -90
},
{
"name": "minecraft:element_80",
"id": -91
},
{
"name": "minecraft:netherreactor",
"id": 247
},
{
"name": "minecraft:element_83",
"id": -94
},
{
"name": "minecraft:element_84",
"id": -95
},
{
"name": "minecraft:jungle_wall_sign",
"id": -189
@ -2075,18 +1679,6 @@
"name": "minecraft:end_brick_stairs",
"id": -178
},
{
"name": "minecraft:element_85",
"id": -96
},
{
"name": "minecraft:element_88",
"id": -99
},
{
"name": "minecraft:element_90",
"id": -101
},
{
"name": "minecraft:birch_standing_sign",
"id": -186
@ -2095,18 +1687,6 @@
"name": "minecraft:gold_ore",
"id": 14
},
{
"name": "minecraft:element_93",
"id": -104
},
{
"name": "minecraft:element_94",
"id": -105
},
{
"name": "minecraft:element_95",
"id": -106
},
{
"name": "minecraft:glass",
"id": 20
@ -2115,62 +1695,10 @@
"name": "minecraft:red_nether_brick",
"id": 215
},
{
"name": "minecraft:element_98",
"id": -109
},
{
"name": "minecraft:element_99",
"id": -110
},
{
"name": "minecraft:element_100",
"id": -111
},
{
"name": "minecraft:element_101",
"id": -112
},
{
"name": "minecraft:element_103",
"id": -114
},
{
"name": "minecraft:element_106",
"id": -117
},
{
"name": "minecraft:element_108",
"id": -119
},
{
"name": "minecraft:element_109",
"id": -120
},
{
"name": "minecraft:element_110",
"id": -121
},
{
"name": "minecraft:element_111",
"id": -122
},
{
"name": "minecraft:element_114",
"id": -125
},
{
"name": "minecraft:birch_fence_gate",
"id": 184
},
{
"name": "minecraft:element_115",
"id": -126
},
{
"name": "minecraft:element_117",
"id": -128
},
{
"name": "minecraft:slime",
"id": 165
@ -2179,10 +1707,6 @@
"name": "minecraft:spruce_standing_sign",
"id": -181
},
{
"name": "minecraft:element_118",
"id": -129
},
{
"name": "minecraft:gravel",
"id": 13
@ -2755,4 +2279,4 @@
"name": "minecraft:item.campfire",
"id": -209
}
]
]

View file

@ -0,0 +1,462 @@
{
"minecraft:air": 0,
"minecraft:stone": 1,
"minecraft:grass": 2,
"minecraft:dirt": 3,
"minecraft:cobblestone": 4,
"minecraft:planks": 5,
"minecraft:sapling": 6,
"minecraft:bedrock": 7,
"minecraft:flowing_water": 8,
"minecraft:water": 9,
"minecraft:flowing_lava": 10,
"minecraft:lava": 11,
"minecraft:sand": 12,
"minecraft:gravel": 13,
"minecraft:gold_ore": 14,
"minecraft:iron_ore": 15,
"minecraft:coal_ore": 16,
"minecraft:log": 17,
"minecraft:leaves": 18,
"minecraft:sponge": 19,
"minecraft:glass": 20,
"minecraft:lapis_ore": 21,
"minecraft:lapis_block": 22,
"minecraft:dispenser": 23,
"minecraft:sandstone": 24,
"minecraft:noteblock": 25,
"minecraft:bed": 26,
"minecraft:golden_rail": 27,
"minecraft:detector_rail": 28,
"minecraft:sticky_piston": 29,
"minecraft:web": 30,
"minecraft:tallgrass": 31,
"minecraft:deadbush": 32,
"minecraft:piston": 33,
"minecraft:pistonArmCollision": 34,
"minecraft:wool": 35,
"minecraft:element_0": 36,
"minecraft:yellow_flower": 37,
"minecraft:red_flower": 38,
"minecraft:brown_mushroom": 39,
"minecraft:red_mushroom": 40,
"minecraft:gold_block": 41,
"minecraft:iron_block": 42,
"minecraft:double_stone_slab": 43,
"minecraft:stone_slab": 44,
"minecraft:brick_block": 45,
"minecraft:tnt": 46,
"minecraft:bookshelf": 47,
"minecraft:mossy_cobblestone": 48,
"minecraft:obsidian": 49,
"minecraft:torch": 50,
"minecraft:fire": 51,
"minecraft:mob_spawner": 52,
"minecraft:oak_stairs": 53,
"minecraft:chest": 54,
"minecraft:redstone_wire": 55,
"minecraft:diamond_ore": 56,
"minecraft:diamond_block": 57,
"minecraft:crafting_table": 58,
"minecraft:wheat": 59,
"minecraft:farmland": 60,
"minecraft:furnace": 61,
"minecraft:lit_furnace": 62,
"minecraft:standing_sign": 63,
"minecraft:wooden_door": 64,
"minecraft:ladder": 65,
"minecraft:rail": 66,
"minecraft:stone_stairs": 67,
"minecraft:wall_sign": 68,
"minecraft:lever": 69,
"minecraft:stone_pressure_plate": 70,
"minecraft:iron_door": 71,
"minecraft:wooden_pressure_plate": 72,
"minecraft:redstone_ore": 73,
"minecraft:lit_redstone_ore": 74,
"minecraft:unlit_redstone_torch": 75,
"minecraft:redstone_torch": 76,
"minecraft:stone_button": 77,
"minecraft:snow_layer": 78,
"minecraft:ice": 79,
"minecraft:snow": 80,
"minecraft:cactus": 81,
"minecraft:clay": 82,
"minecraft:reeds": 83,
"minecraft:jukebox": 84,
"minecraft:fence": 85,
"minecraft:pumpkin": 86,
"minecraft:netherrack": 87,
"minecraft:soul_sand": 88,
"minecraft:glowstone": 89,
"minecraft:portal": 90,
"minecraft:lit_pumpkin": 91,
"minecraft:cake": 92,
"minecraft:unpowered_repeater": 93,
"minecraft:powered_repeater": 94,
"minecraft:invisibleBedrock": 95,
"minecraft:trapdoor": 96,
"minecraft:monster_egg": 97,
"minecraft:stonebrick": 98,
"minecraft:brown_mushroom_block": 99,
"minecraft:red_mushroom_block": 100,
"minecraft:iron_bars": 101,
"minecraft:glass_pane": 102,
"minecraft:melon_block": 103,
"minecraft:pumpkin_stem": 104,
"minecraft:melon_stem": 105,
"minecraft:vine": 106,
"minecraft:fence_gate": 107,
"minecraft:brick_stairs": 108,
"minecraft:stone_brick_stairs": 109,
"minecraft:mycelium": 110,
"minecraft:waterlily": 111,
"minecraft:nether_brick": 112,
"minecraft:nether_brick_fence": 113,
"minecraft:nether_brick_stairs": 114,
"minecraft:nether_wart": 115,
"minecraft:enchanting_table": 116,
"minecraft:brewing_stand": 117,
"minecraft:cauldron": 118,
"minecraft:end_portal": 119,
"minecraft:end_portal_frame": 120,
"minecraft:end_stone": 121,
"minecraft:dragon_egg": 122,
"minecraft:redstone_lamp": 123,
"minecraft:lit_redstone_lamp": 124,
"minecraft:dropper": 125,
"minecraft:activator_rail": 126,
"minecraft:cocoa": 127,
"minecraft:sandstone_stairs": 128,
"minecraft:emerald_ore": 129,
"minecraft:ender_chest": 130,
"minecraft:tripwire_hook": 131,
"minecraft:tripWire": 132,
"minecraft:emerald_block": 133,
"minecraft:spruce_stairs": 134,
"minecraft:birch_stairs": 135,
"minecraft:jungle_stairs": 136,
"minecraft:command_block": 137,
"minecraft:beacon": 138,
"minecraft:cobblestone_wall": 139,
"minecraft:flower_pot": 140,
"minecraft:carrots": 141,
"minecraft:potatoes": 142,
"minecraft:wooden_button": 143,
"minecraft:skull": 144,
"minecraft:anvil": 145,
"minecraft:trapped_chest": 146,
"minecraft:light_weighted_pressure_plate": 147,
"minecraft:heavy_weighted_pressure_plate": 148,
"minecraft:unpowered_comparator": 149,
"minecraft:powered_comparator": 150,
"minecraft:daylight_detector": 151,
"minecraft:redstone_block": 152,
"minecraft:quartz_ore": 153,
"minecraft:hopper": 154,
"minecraft:quartz_block": 155,
"minecraft:quartz_stairs": 156,
"minecraft:double_wooden_slab": 157,
"minecraft:wooden_slab": 158,
"minecraft:stained_hardened_clay": 159,
"minecraft:stained_glass_pane": 160,
"minecraft:leaves2": 161,
"minecraft:log2": 162,
"minecraft:acacia_stairs": 163,
"minecraft:dark_oak_stairs": 164,
"minecraft:slime": 165,
"minecraft:iron_trapdoor": 167,
"minecraft:prismarine": 168,
"minecraft:seaLantern": 169,
"minecraft:hay_block": 170,
"minecraft:carpet": 171,
"minecraft:hardened_clay": 172,
"minecraft:coal_block": 173,
"minecraft:packed_ice": 174,
"minecraft:double_plant": 175,
"minecraft:standing_banner": 176,
"minecraft:wall_banner": 177,
"minecraft:daylight_detector_inverted": 178,
"minecraft:red_sandstone": 179,
"minecraft:red_sandstone_stairs": 180,
"minecraft:double_stone_slab2": 181,
"minecraft:stone_slab2": 182,
"minecraft:spruce_fence_gate": 183,
"minecraft:birch_fence_gate": 184,
"minecraft:jungle_fence_gate": 185,
"minecraft:dark_oak_fence_gate": 186,
"minecraft:acacia_fence_gate": 187,
"minecraft:repeating_command_block": 188,
"minecraft:chain_command_block": 189,
"minecraft:hard_glass_pane": 190,
"minecraft:hard_stained_glass_pane": 191,
"minecraft:chemical_heat": 192,
"minecraft:spruce_door": 193,
"minecraft:birch_door": 194,
"minecraft:jungle_door": 195,
"minecraft:acacia_door": 196,
"minecraft:dark_oak_door": 197,
"minecraft:grass_path": 198,
"minecraft:frame": 199,
"minecraft:chorus_flower": 200,
"minecraft:purpur_block": 201,
"minecraft:colored_torch_rg": 202,
"minecraft:purpur_stairs": 203,
"minecraft:colored_torch_bp": 204,
"minecraft:undyed_shulker_box": 205,
"minecraft:end_bricks": 206,
"minecraft:frosted_ice": 207,
"minecraft:end_rod": 208,
"minecraft:end_gateway": 209,
"minecraft:magma": 213,
"minecraft:nether_wart_block": 214,
"minecraft:red_nether_brick": 215,
"minecraft:bone_block": 216,
"minecraft:shulker_box": 218,
"minecraft:purple_glazed_terracotta": 219,
"minecraft:white_glazed_terracotta": 220,
"minecraft:orange_glazed_terracotta": 221,
"minecraft:magenta_glazed_terracotta": 222,
"minecraft:light_blue_glazed_terracotta": 223,
"minecraft:yellow_glazed_terracotta": 224,
"minecraft:lime_glazed_terracotta": 225,
"minecraft:pink_glazed_terracotta": 226,
"minecraft:gray_glazed_terracotta": 227,
"minecraft:silver_glazed_terracotta": 228,
"minecraft:cyan_glazed_terracotta": 229,
"minecraft:blue_glazed_terracotta": 231,
"minecraft:brown_glazed_terracotta": 232,
"minecraft:green_glazed_terracotta": 233,
"minecraft:red_glazed_terracotta": 234,
"minecraft:black_glazed_terracotta": 235,
"minecraft:concrete": 236,
"minecraft:concretePowder": 237,
"minecraft:chemistry_table": 238,
"minecraft:underwater_torch": 239,
"minecraft:chorus_plant": 240,
"minecraft:stained_glass": 241,
"minecraft:podzol": 243,
"minecraft:beetroot": 244,
"minecraft:stonecutter": 245,
"minecraft:glowingobsidian": 246,
"minecraft:netherreactor": 247,
"minecraft:info_update": 248,
"minecraft:info_update2": 249,
"minecraft:movingBlock": 250,
"minecraft:observer": 251,
"minecraft:structure_block": 252,
"minecraft:hard_glass": 253,
"minecraft:hard_stained_glass": 254,
"minecraft:reserved6": 255,
"minecraft:prismarine_stairs": 257,
"minecraft:dark_prismarine_stairs": 258,
"minecraft:prismarine_bricks_stairs": 259,
"minecraft:stripped_spruce_log": 260,
"minecraft:stripped_birch_log": 261,
"minecraft:stripped_jungle_log": 262,
"minecraft:stripped_acacia_log": 263,
"minecraft:stripped_dark_oak_log": 264,
"minecraft:stripped_oak_log": 265,
"minecraft:blue_ice": 266,
"minecraft:element_1": 267,
"minecraft:element_2": 268,
"minecraft:element_3": 269,
"minecraft:element_4": 270,
"minecraft:element_5": 271,
"minecraft:element_6": 272,
"minecraft:element_7": 273,
"minecraft:element_8": 274,
"minecraft:element_9": 275,
"minecraft:element_10": 276,
"minecraft:element_11": 277,
"minecraft:element_12": 278,
"minecraft:element_13": 279,
"minecraft:element_14": 280,
"minecraft:element_15": 281,
"minecraft:element_16": 282,
"minecraft:element_17": 283,
"minecraft:element_18": 284,
"minecraft:element_19": 285,
"minecraft:element_20": 286,
"minecraft:element_21": 287,
"minecraft:element_22": 288,
"minecraft:element_23": 289,
"minecraft:element_24": 290,
"minecraft:element_25": 291,
"minecraft:element_26": 292,
"minecraft:element_27": 293,
"minecraft:element_28": 294,
"minecraft:element_29": 295,
"minecraft:element_30": 296,
"minecraft:element_31": 297,
"minecraft:element_32": 298,
"minecraft:element_33": 299,
"minecraft:element_34": 300,
"minecraft:element_35": 301,
"minecraft:element_36": 302,
"minecraft:element_37": 303,
"minecraft:element_38": 304,
"minecraft:element_39": 305,
"minecraft:element_40": 306,
"minecraft:element_41": 307,
"minecraft:element_42": 308,
"minecraft:element_43": 309,
"minecraft:element_44": 310,
"minecraft:element_45": 311,
"minecraft:element_46": 312,
"minecraft:element_47": 313,
"minecraft:element_48": 314,
"minecraft:element_49": 315,
"minecraft:element_50": 316,
"minecraft:element_51": 317,
"minecraft:element_52": 318,
"minecraft:element_53": 319,
"minecraft:element_54": 320,
"minecraft:element_55": 321,
"minecraft:element_56": 322,
"minecraft:element_57": 323,
"minecraft:element_58": 324,
"minecraft:element_59": 325,
"minecraft:element_60": 326,
"minecraft:element_61": 327,
"minecraft:element_62": 328,
"minecraft:element_63": 329,
"minecraft:element_64": 330,
"minecraft:element_65": 331,
"minecraft:element_66": 332,
"minecraft:element_67": 333,
"minecraft:element_68": 334,
"minecraft:element_69": 335,
"minecraft:element_70": 336,
"minecraft:element_71": 337,
"minecraft:element_72": 338,
"minecraft:element_73": 339,
"minecraft:element_74": 340,
"minecraft:element_75": 341,
"minecraft:element_76": 342,
"minecraft:element_77": 343,
"minecraft:element_78": 344,
"minecraft:element_79": 345,
"minecraft:element_80": 346,
"minecraft:element_81": 347,
"minecraft:element_82": 348,
"minecraft:element_83": 349,
"minecraft:element_84": 350,
"minecraft:element_85": 351,
"minecraft:element_86": 352,
"minecraft:element_87": 353,
"minecraft:element_88": 354,
"minecraft:element_89": 355,
"minecraft:element_90": 356,
"minecraft:element_91": 357,
"minecraft:element_92": 358,
"minecraft:element_93": 359,
"minecraft:element_94": 360,
"minecraft:element_95": 361,
"minecraft:element_96": 362,
"minecraft:element_97": 363,
"minecraft:element_98": 364,
"minecraft:element_99": 365,
"minecraft:element_100": 366,
"minecraft:element_101": 367,
"minecraft:element_102": 368,
"minecraft:element_103": 369,
"minecraft:element_104": 370,
"minecraft:element_105": 371,
"minecraft:element_106": 372,
"minecraft:element_107": 373,
"minecraft:element_108": 374,
"minecraft:element_109": 375,
"minecraft:element_110": 376,
"minecraft:element_111": 377,
"minecraft:element_112": 378,
"minecraft:element_113": 379,
"minecraft:element_114": 380,
"minecraft:element_115": 381,
"minecraft:element_116": 382,
"minecraft:element_117": 383,
"minecraft:element_118": 384,
"minecraft:seagrass": 385,
"minecraft:coral": 386,
"minecraft:coral_block": 387,
"minecraft:coral_fan": 388,
"minecraft:coral_fan_dead": 389,
"minecraft:coral_fan_hang": 390,
"minecraft:coral_fan_hang2": 391,
"minecraft:coral_fan_hang3": 392,
"minecraft:kelp": 393,
"minecraft:dried_kelp_block": 394,
"minecraft:acacia_button": 395,
"minecraft:birch_button": 396,
"minecraft:dark_oak_button": 397,
"minecraft:jungle_button": 398,
"minecraft:spruce_button": 399,
"minecraft:acacia_trapdoor": 400,
"minecraft:birch_trapdoor": 401,
"minecraft:dark_oak_trapdoor": 402,
"minecraft:jungle_trapdoor": 403,
"minecraft:spruce_trapdoor": 404,
"minecraft:acacia_pressure_plate": 405,
"minecraft:birch_pressure_plate": 406,
"minecraft:dark_oak_pressure_plate": 407,
"minecraft:jungle_pressure_plate": 408,
"minecraft:spruce_pressure_plate": 409,
"minecraft:carved_pumpkin": 410,
"minecraft:sea_pickle": 411,
"minecraft:conduit": 412,
"minecraft:turtle_egg": 414,
"minecraft:bubble_column": 415,
"minecraft:barrier": 416,
"minecraft:stone_slab3": 417,
"minecraft:bamboo": 418,
"minecraft:bamboo_sapling": 419,
"minecraft:scaffolding": 420,
"minecraft:stone_slab4": 421,
"minecraft:double_stone_slab3": 422,
"minecraft:double_stone_slab4": 423,
"minecraft:granite_stairs": 424,
"minecraft:diorite_stairs": 425,
"minecraft:andesite_stairs": 426,
"minecraft:polished_granite_stairs": 427,
"minecraft:polished_diorite_stairs": 428,
"minecraft:polished_andesite_stairs": 429,
"minecraft:mossy_stone_brick_stairs": 430,
"minecraft:smooth_red_sandstone_stairs": 431,
"minecraft:smooth_sandstone_stairs": 432,
"minecraft:end_brick_stairs": 433,
"minecraft:mossy_cobblestone_stairs": 434,
"minecraft:normal_stone_stairs": 435,
"minecraft:spruce_standing_sign": 436,
"minecraft:spruce_wall_sign": 437,
"minecraft:smooth_stone": 438,
"minecraft:red_nether_brick_stairs": 439,
"minecraft:smooth_quartz_stairs": 440,
"minecraft:birch_standing_sign": 441,
"minecraft:birch_wall_sign": 442,
"minecraft:jungle_standing_sign": 443,
"minecraft:jungle_wall_sign": 444,
"minecraft:acacia_standing_sign": 445,
"minecraft:acacia_wall_sign": 446,
"minecraft:darkoak_standing_sign": 447,
"minecraft:darkoak_wall_sign": 448,
"minecraft:lectern": 449,
"minecraft:grindstone": 450,
"minecraft:blast_furnace": 451,
"minecraft:stonecutter_block": 452,
"minecraft:smoker": 453,
"minecraft:lit_smoker": 454,
"minecraft:cartography_table": 455,
"minecraft:fletching_table": 456,
"minecraft:smithing_table": 457,
"minecraft:barrel": 458,
"minecraft:loom": 459,
"minecraft:bell": 461,
"minecraft:sweet_berry_bush": 462,
"minecraft:lantern": 463,
"minecraft:campfire": 464,
"minecraft:lava_cauldron": 465,
"minecraft:jigsaw": 466,
"minecraft:wood": 467,
"minecraft:composter": 468,
"minecraft:lit_blast_furnace": 469
}

View file

@ -0,0 +1,229 @@
{
"minecraft:iron_shovel": 256,
"minecraft:iron_pickaxe": 257,
"minecraft:iron_axe": 258,
"minecraft:flint_and_steel": 259,
"minecraft:apple": 260,
"minecraft:bow": 261,
"minecraft:arrow": 262,
"minecraft:coal": 263,
"minecraft:diamond": 264,
"minecraft:iron_ingot": 265,
"minecraft:gold_ingot": 266,
"minecraft:iron_sword": 267,
"minecraft:wooden_sword": 268,
"minecraft:wooden_shovel": 269,
"minecraft:wooden_pickaxe": 270,
"minecraft:wooden_axe": 271,
"minecraft:stone_sword": 272,
"minecraft:stone_shovel": 273,
"minecraft:stone_pickaxe": 274,
"minecraft:stone_axe": 275,
"minecraft:diamond_sword": 276,
"minecraft:diamond_shovel": 277,
"minecraft:diamond_pickaxe": 278,
"minecraft:diamond_axe": 279,
"minecraft:stick": 280,
"minecraft:bowl": 281,
"minecraft:mushroom_stew": 282,
"minecraft:golden_sword": 283,
"minecraft:golden_shovel": 284,
"minecraft:golden_pickaxe": 285,
"minecraft:golden_axe": 286,
"minecraft:string": 287,
"minecraft:feather": 288,
"minecraft:gunpowder": 289,
"minecraft:wooden_hoe": 290,
"minecraft:stone_hoe": 291,
"minecraft:iron_hoe": 292,
"minecraft:diamond_hoe": 293,
"minecraft:golden_hoe": 294,
"minecraft:wheat_seeds": 295,
"minecraft:wheat": 296,
"minecraft:bread": 297,
"minecraft:leather_helmet": 298,
"minecraft:leather_chestplate": 299,
"minecraft:leather_leggings": 300,
"minecraft:leather_boots": 301,
"minecraft:chainmail_helmet": 302,
"minecraft:chainmail_chestplate": 303,
"minecraft:chainmail_leggings": 304,
"minecraft:chainmail_boots": 305,
"minecraft:iron_helmet": 306,
"minecraft:iron_chestplate": 307,
"minecraft:iron_leggings": 308,
"minecraft:iron_boots": 309,
"minecraft:diamond_helmet": 310,
"minecraft:diamond_chestplate": 311,
"minecraft:diamond_leggings": 312,
"minecraft:diamond_boots": 313,
"minecraft:golden_helmet": 314,
"minecraft:golden_chestplate": 315,
"minecraft:golden_leggings": 316,
"minecraft:golden_boots": 317,
"minecraft:flint": 318,
"minecraft:porkchop": 319,
"minecraft:cooked_porkchop": 320,
"minecraft:painting": 321,
"minecraft:golden_apple": 322,
"minecraft:sign": 323,
"minecraft:wooden_door": 324,
"minecraft:bucket": 325,
"minecraft:minecart": 328,
"minecraft:saddle": 329,
"minecraft:iron_door": 330,
"minecraft:redstone": 331,
"minecraft:snowball": 332,
"minecraft:boat": 333,
"minecraft:leather": 334,
"minecraft:kelp": 335,
"minecraft:brick": 336,
"minecraft:clay_ball": 337,
"minecraft:reeds": 338,
"minecraft:paper": 339,
"minecraft:book": 340,
"minecraft:slime_ball": 341,
"minecraft:chest_minecart": 342,
"minecraft:egg": 344,
"minecraft:compass": 345,
"minecraft:fishing_rod": 346,
"minecraft:clock": 347,
"minecraft:glowstone_dust": 348,
"minecraft:fish": 349,
"minecraft:cooked_fish": 350,
"minecraft:dye": 351,
"minecraft:bone": 352,
"minecraft:sugar": 353,
"minecraft:cake": 354,
"minecraft:bed": 355,
"minecraft:repeater": 356,
"minecraft:cookie": 357,
"minecraft:map": 358,
"minecraft:shears": 359,
"minecraft:melon": 360,
"minecraft:pumpkin_seeds": 361,
"minecraft:melon_seeds": 362,
"minecraft:beef": 363,
"minecraft:cooked_beef": 364,
"minecraft:chicken": 365,
"minecraft:cooked_chicken": 366,
"minecraft:rotten_flesh": 367,
"minecraft:ender_pearl": 368,
"minecraft:blaze_rod": 369,
"minecraft:ghast_tear": 370,
"minecraft:gold_nugget": 371,
"minecraft:nether_wart": 372,
"minecraft:potion": 373,
"minecraft:glass_bottle": 374,
"minecraft:spider_eye": 375,
"minecraft:fermented_spider_eye": 376,
"minecraft:blaze_powder": 377,
"minecraft:magma_cream": 378,
"minecraft:brewing_stand": 379,
"minecraft:cauldron": 380,
"minecraft:composter": 381,
"minecraft:speckled_melon": 382,
"minecraft:spawn_egg": 383,
"minecraft:experience_bottle": 384,
"minecraft:fireball": 385,
"minecraft:writable_book": 386,
"minecraft:written_book": 387,
"minecraft:emerald": 388,
"minecraft:frame": 389,
"minecraft:flower_pot": 390,
"minecraft:carrot": 391,
"minecraft:potato": 392,
"minecraft:baked_potato": 393,
"minecraft:poisonous_potato": 394,
"minecraft:emptyMap": 395,
"minecraft:golden_carrot": 396,
"minecraft:skull": 397,
"minecraft:carrotOnAStick": 398,
"minecraft:netherStar": 399,
"minecraft:pumpkin_pie": 400,
"minecraft:fireworks": 401,
"minecraft:fireworksCharge": 402,
"minecraft:enchanted_book": 403,
"minecraft:comparator": 404,
"minecraft:netherbrick": 405,
"minecraft:quartz": 406,
"minecraft:tnt_minecart": 407,
"minecraft:hopper_minecart": 408,
"minecraft:prismarine_shard": 409,
"minecraft:hopper": 410,
"minecraft:rabbit": 411,
"minecraft:cooked_rabbit": 412,
"minecraft:rabbit_stew": 413,
"minecraft:rabbit_foot": 414,
"minecraft:rabbit_hide": 415,
"minecraft:horsearmorleather": 416,
"minecraft:horsearmoriron": 417,
"minecraft:horsearmorgold": 418,
"minecraft:horsearmordiamond": 419,
"minecraft:lead": 420,
"minecraft:nametag": 422,
"minecraft:muttonRaw": 423,
"minecraft:muttonCooked": 424,
"minecraft:armor_stand": 425,
"minecraft:end_crystal": 426,
"minecraft:spruce_door": 427,
"minecraft:birch_door": 428,
"minecraft:jungle_door": 429,
"minecraft:acacia_door": 430,
"minecraft:dark_oak_door": 431,
"minecraft:chorus_fruit": 432,
"minecraft:chorus_fruit_popped": 433,
"minecraft:banner_pattern": 434,
"minecraft:dragon_breath": 437,
"minecraft:splash_potion": 438,
"minecraft:lingering_potion": 441,
"minecraft:sparkler": 442,
"minecraft:command_block_minecart": 443,
"minecraft:elytra": 444,
"minecraft:shulker_shell": 445,
"minecraft:banner": 446,
"minecraft:medicine": 447,
"minecraft:balloon": 448,
"minecraft:rapid_fertilizer": 449,
"minecraft:totem": 450,
"minecraft:bleach": 451,
"minecraft:iron_nugget": 452,
"minecraft:ice_bomb": 453,
"minecraft:trident": 455,
"minecraft:beetroot": 457,
"minecraft:beetroot_seeds": 458,
"minecraft:beetroot_soup": 459,
"minecraft:salmon": 460,
"minecraft:clownfish": 461,
"minecraft:pufferfish": 462,
"minecraft:cooked_salmon": 463,
"minecraft:dried_kelp": 464,
"minecraft:nautilus_shell": 465,
"minecraft:appleEnchanted": 466,
"minecraft:heart_of_the_sea": 467,
"minecraft:turtle_shell_piece": 468,
"minecraft:turtle_helmet": 469,
"minecraft:phantom_membrane": 470,
"minecraft:crossbow": 471,
"minecraft:spruce_sign": 472,
"minecraft:birch_sign": 473,
"minecraft:jungle_sign": 474,
"minecraft:acacia_sign": 475,
"minecraft:darkoak_sign": 476,
"minecraft:sweet_berries": 477,
"minecraft:compound": 499,
"minecraft:record_13": 500,
"minecraft:record_cat": 501,
"minecraft:record_blocks": 502,
"minecraft:record_chirp": 503,
"minecraft:record_far": 504,
"minecraft:record_mall": 505,
"minecraft:record_mellohi": 506,
"minecraft:record_stal": 507,
"minecraft:record_strad": 508,
"minecraft:record_ward": 509,
"minecraft:record_11": 510,
"minecraft:record_wait": 511,
"minecraft:shield": 513,
"minecraft:campfire": 720
}

View file

@ -1,409 +0,0 @@
{
"minecraft:shulker_box" : {
"0" : "minecraft:white_shulker_box",
"1" : "minecraft:orange_shulker_box",
"2" : "minecraft:magenta_shulker_box",
"3" : "minecraft:light_blue_shulker_box",
"4" : "minecraft:yellow_shulker_box",
"5" : "minecraft:lime_shulker_box",
"6" : "minecraft:pink_shulker_box",
"7" : "minecraft:gray_shulker_box",
"8" : "minecraft:light_gray_shulker_box",
"9" : "minecraft:cyan_shulker_box",
"10" : "minecraft:purple_shulker_box",
"11" : "minecraft:blue_shulker_box",
"12" : "minecraft:brown_shulker_box",
"13" : "minecraft:green_shulker_box",
"14" : "minecraft:red_shulker_box",
"15" : "minecraft:black_shulker_box"
},
"minecraft:trapdoor" : {
"0" : "minecraft:oak_trapdoor",
"1" : "minecraft:spruce_trapdoor",
"2" : "minecraft:birch_trapdoor",
"3" : "minecraft:jungle_trapdoor",
"4" : "minecraft:acacia_trapdoor",
"5" : "minecraft:dark_oak_trapdoor"
},
"minecraft:stained_glass" : {
"0" : "minecraft:white_stained_glass",
"1" : "minecraft:orange_stained_glass",
"2" : "minecraft:magenta_stained_glass",
"3" : "minecraft:light_blue_stained_glass",
"4" : "minecraft:yellow_stained_glass",
"5" : "minecraft:lime_stained_glass",
"6" : "minecraft:pink_stained_glass",
"7" : "minecraft:gray_stained_glass",
"8" : "minecraft:light_gray_stained_glass",
"9" : "minecraft:cyan_stained_glass",
"10" : "minecraft:purple_stained_glass",
"11" : "minecraft:blue_stained_glass",
"12" : "minecraft:brown_stained_glass",
"13" : "minecraft:green_stained_glass",
"14" : "minecraft:red_stained_glass",
"15" : "minecraft:black_stained_glass"
},
"minecraft:stained_hardened_clay" : {
"0" : "minecraft:white_terracotta",
"1" : "minecraft:orange_terracotta",
"2" : "minecraft:magenta_terracotta",
"3" : "minecraft:light_blue_terracotta",
"4" : "minecraft:yellow_terracotta",
"5" : "minecraft:lime_terracotta",
"6" : "minecraft:pink_terracotta",
"7" : "minecraft:gray_terracotta",
"8" : "minecraft:light_gray_terracotta",
"9" : "minecraft:cyan_terracotta",
"10" : "minecraft:purple_terracotta",
"11" : "minecraft:blue_terracotta",
"12" : "minecraft:brown_terracotta",
"13" : "minecraft:green_terracotta",
"14" : "minecraft:red_terracotta",
"15" : "minecraft:black_terracotta"
},
"minecraft:dye" : {
"0" : "minecraft:white_dye",
"1" : "minecraft:orange_dye",
"2" : "minecraft:magenta_dye",
"3" : "minecraft:light_blue_dye",
"4" : "minecraft:yellow_dye",
"5" : "minecraft:lime_dye",
"6" : "minecraft:pink_dye",
"7" : "minecraft:gray_dye",
"8" : "minecraft:light_gray_dye",
"9" : "minecraft:cyan_dye",
"10" : "minecraft:purple_dye",
"11" : "minecraft:blue_dye",
"12" : "minecraft:brown_dye",
"13" : "minecraft:green_dye",
"14" : "minecraft:red_dye",
"15" : "minecraft:black_dye"
},
"minecraft:prismarine_stairs" : {
"0" : "minecraft:prismarine_stairs",
"1" : "minecraft:prismarine_stairs",
"2" : "minecraft:prismarine_stairs",
"3" : "minecraft:prismarine_stairs",
"4" : "minecraft:prismarine_stairs",
"5" : "minecraft:prismarine_stairs",
"6" : "minecraft:prismarine_stairs",
"7" : "minecraft:prismarine_stairs"
},
"minecraft:spruce_stairs" : {
"0" : "minecraft:spruce_stairs",
"1" : "minecraft:spruce_stairs",
"2" : "minecraft:spruce_stairs",
"3" : "minecraft:spruce_stairs",
"4" : "minecraft:spruce_stairs",
"5" : "minecraft:spruce_stairs",
"6" : "minecraft:spruce_stairs",
"7" : "minecraft:spruce_stairs"
},
"minecraft:fence" : {
"0" : "minecraft:oak_fence",
"1" : "minecraft:spruce_fence",
"2" : "minecraft:birch_fence",
"3" : "minecraft:jungle_fence",
"4" : "minecraft:acacia_fence",
"5" : "minecraft:dark_oak_fence"
},
"minecraft:carpet" : {
"0" : "minecraft:white_carpet",
"1" : "minecraft:orange_carpet",
"2" : "minecraft:magenta_carpet",
"3" : "minecraft:light_blue_carpet",
"4" : "minecraft:yellow_carpet",
"5" : "minecraft:lime_carpet",
"6" : "minecraft:pink_carpet",
"7" : "minecraft:gray_carpet",
"8" : "minecraft:light_gray_carpet",
"9" : "minecraft:cyan_carpet",
"10" : "minecraft:purple_carpet",
"11" : "minecraft:blue_carpet",
"12" : "minecraft:brown_carpet",
"13" : "minecraft:green_carpet",
"14" : "minecraft:red_carpet",
"15" : "minecraft:black_carpet"
},
"minecraft:concrete" : {
"0" : "minecraft:white_concrete",
"1" : "minecraft:orange_concrete",
"2" : "minecraft:magenta_concrete",
"3" : "minecraft:light_blue_concrete",
"4" : "minecraft:yellow_concrete",
"5" : "minecraft:lime_concrete",
"6" : "minecraft:pink_concrete",
"7" : "minecraft:gray_concrete",
"8" : "minecraft:light_gray_concrete",
"9" : "minecraft:cyan_concrete",
"10" : "minecraft:purple_concrete",
"11" : "minecraft:blue_concrete",
"12" : "minecraft:brown_concrete",
"13" : "minecraft:green_concrete",
"14" : "minecraft:red_concrete",
"15" : "minecraft:black_concrete"
},
"minecraft:acacia_stairs" : {
"0" : "minecraft:acacia_stairs",
"1" : "minecraft:acacia_stairs",
"2" : "minecraft:acacia_stairs",
"3" : "minecraft:acacia_stairs",
"4" : "minecraft:acacia_stairs",
"5" : "minecraft:acacia_stairs",
"6" : "minecraft:acacia_stairs",
"7" : "minecraft:acacia_stairs"
},
"minecraft:planks" : {
"0" : "minecraft:oak_planks",
"1" : "minecraft:spruce_planks",
"2" : "minecraft:birch_planks",
"3" : "minecraft:jungle_planks",
"4" : "minecraft:acacia_planks",
"5" : "minecraft:dark_oak_planks"
},
"minecraft:boat" : {
"0" : "minecraft:oak_boat",
"1" : "minecraft:spruce_boat",
"2" : "minecraft:birch_boat",
"3" : "minecraft:jungle_boat",
"4" : "minecraft:acacia_boat",
"5" : "minecraft:dark_oak_boat"
},
"minecraft:dark_prismarine_stairs" : {
"0" : "minecraft:dark_prismarine_stairs",
"1" : "minecraft:dark_prismarine_stairs",
"2" : "minecraft:dark_prismarine_stairs",
"3" : "minecraft:dark_prismarine_stairs",
"4" : "minecraft:dark_prismarine_stairs",
"5" : "minecraft:dark_prismarine_stairs",
"6" : "minecraft:dark_prismarine_stairs",
"7" : "minecraft:dark_prismarine_stairs"
},
"minecraft:log" : {
"0" : "minecraft:oak_log",
"1" : "minecraft:spruce_log",
"2" : "minecraft:birch_log",
"3" : "minecraft:jungle_log",
"4" : "minecraft:acacia_log",
"5" : "minecraft:dark_oak_log"
},
"minecraft:quartz_stairs" : {
"0" : "minecraft:quartz_stairs",
"1" : "minecraft:quartz_stairs",
"2" : "minecraft:quartz_stairs",
"3" : "minecraft:quartz_stairs",
"4" : "minecraft:quartz_stairs",
"5" : "minecraft:quartz_stairs",
"6" : "minecraft:quartz_stairs",
"7" : "minecraft:quartz_stairs"
},
"minecraft:brick_stairs" : {
"0" : "minecraft:brick_stairs",
"1" : "minecraft:brick_stairs",
"2" : "minecraft:brick_stairs",
"3" : "minecraft:brick_stairs",
"4" : "minecraft:brick_stairs",
"5" : "minecraft:brick_stairs",
"6" : "minecraft:brick_stairs",
"7" : "minecraft:brick_stairs"
},
"minecraft:wood" : {
"0" : "minecraft:oak_wood",
"1" : "minecraft:spruce_wood",
"2" : "minecraft:birch_wood",
"3" : "minecraft:jungle_wood",
"4" : "minecraft:acacia_wood",
"5" : "minecraft:dark_oak_wood"
},
"minecraft:bed" : {
"0" : "minecraft:white_bed",
"1" : "minecraft:orange_bed",
"2" : "minecraft:magenta_bed",
"3" : "minecraft:light_blue_bed",
"4" : "minecraft:yellow_bed",
"5" : "minecraft:lime_bed",
"6" : "minecraft:pink_bed",
"7" : "minecraft:gray_bed",
"8" : "minecraft:light_gray_bed",
"9" : "minecraft:cyan_bed",
"10" : "minecraft:purple_bed",
"11" : "minecraft:blue_bed",
"12" : "minecraft:brown_bed",
"13" : "minecraft:green_bed",
"14" : "minecraft:red_bed",
"15" : "minecraft:black_bed"
},
"minecraft:red_nether_brick_stairs" : {
"0" : "minecraft:red_nether_brick_stairs",
"1" : "minecraft:red_nether_brick_stairs",
"2" : "minecraft:red_nether_brick_stairs",
"3" : "minecraft:red_nether_brick_stairs",
"4" : "minecraft:red_nether_brick_stairs",
"5" : "minecraft:red_nether_brick_stairs",
"6" : "minecraft:red_nether_brick_stairs",
"7" : "minecraft:red_nether_brick_stairs"
},
"minecraft:concrete_powder" : {
"0" : "minecraft:white_concrete_powder",
"1" : "minecraft:orange_concrete_powder",
"2" : "minecraft:magenta_concrete_powder",
"3" : "minecraft:light_blue_concrete_powder",
"4" : "minecraft:yellow_concrete_powder",
"5" : "minecraft:lime_concrete_powder",
"6" : "minecraft:pink_concrete_powder",
"7" : "minecraft:gray_concrete_powder",
"8" : "minecraft:light_gray_concrete_powder",
"9" : "minecraft:cyan_concrete_powder",
"10" : "minecraft:purple_concrete_powder",
"11" : "minecraft:blue_concrete_powder",
"12" : "minecraft:brown_concrete_powder",
"13" : "minecraft:green_concrete_powder",
"14" : "minecraft:red_concrete_powder",
"15" : "minecraft:black_concrete_powder"
},
"minecraft:wool" : {
"0" : "minecraft:white_wool",
"1" : "minecraft:orange_wool",
"2" : "minecraft:magenta_wool",
"3" : "minecraft:light_blue_wool",
"4" : "minecraft:yellow_wool",
"5" : "minecraft:lime_wool",
"6" : "minecraft:pink_wool",
"7" : "minecraft:gray_wool",
"8" : "minecraft:light_gray_wool",
"9" : "minecraft:cyan_wool",
"10" : "minecraft:purple_wool",
"11" : "minecraft:blue_wool",
"12" : "minecraft:brown_wool",
"13" : "minecraft:green_wool",
"14" : "minecraft:red_wool",
"15" : "minecraft:black_wool"
},
"minecraft:sign" : {
"0" : "minecraft:oak_sign",
"1" : "minecraft:spruce_sign",
"2" : "minecraft:birch_sign",
"3" : "minecraft:jungle_sign",
"4" : "minecraft:acacia_sign",
"5" : "minecraft:dark_oak_sign"
},
"minecraft:smooth_quartz_stairs" : {
"0" : "minecraft:smooth_quartz_stairs",
"1" : "minecraft:smooth_quartz_stairs",
"2" : "minecraft:smooth_quartz_stairs",
"3" : "minecraft:smooth_quartz_stairs",
"4" : "minecraft:smooth_quartz_stairs",
"5" : "minecraft:smooth_quartz_stairs",
"6" : "minecraft:smooth_quartz_stairs",
"7" : "minecraft:smooth_quartz_stairs"
},
"minecraft:banner" : {
"0" : "minecraft:white_banner",
"1" : "minecraft:orange_banner",
"2" : "minecraft:magenta_banner",
"3" : "minecraft:light_blue_banner",
"4" : "minecraft:yellow_banner",
"5" : "minecraft:lime_banner",
"6" : "minecraft:pink_banner",
"7" : "minecraft:gray_banner",
"8" : "minecraft:light_gray_banner",
"9" : "minecraft:cyan_banner",
"10" : "minecraft:purple_banner",
"11" : "minecraft:blue_banner",
"12" : "minecraft:brown_banner",
"13" : "minecraft:green_banner",
"14" : "minecraft:red_banner",
"15" : "minecraft:black_banner"
},
"minecraft:purpur_stairs" : {
"0" : "minecraft:purpur_stairs",
"1" : "minecraft:purpur_stairs",
"2" : "minecraft:purpur_stairs",
"3" : "minecraft:purpur_stairs",
"4" : "minecraft:purpur_stairs",
"5" : "minecraft:purpur_stairs",
"6" : "minecraft:purpur_stairs",
"7" : "minecraft:purpur_stairs"
},
"minecraft:stone" : {
"0" : "minecraft:stone",
"1" : "minecraft:granite",
"2" : "minecraft:polished_granite",
"3" : "minecraft:diorite",
"4" : "minecraft:polished_diorite",
"5" : "minecraft:andesite",
"6" : "minecraft:polished_andesite"
},
"minecraft:birch_stairs" : {
"0" : "minecraft:birch_stairs",
"1" : "minecraft:birch_stairs",
"2" : "minecraft:birch_stairs",
"3" : "minecraft:birch_stairs",
"4" : "minecraft:birch_stairs",
"5" : "minecraft:birch_stairs",
"6" : "minecraft:birch_stairs",
"7" : "minecraft:birch_stairs"
},
"minecraft:stained_glass_pane" : {
"0" : "minecraft:white_stained_glass_pane",
"1" : "minecraft:orange_stained_glass_pane",
"2" : "minecraft:magenta_stained_glass_pane",
"3" : "minecraft:light_blue_stained_glass_pane",
"4" : "minecraft:yellow_stained_glass_pane",
"5" : "minecraft:lime_stained_glass_pane",
"6" : "minecraft:pink_stained_glass_pane",
"7" : "minecraft:gray_stained_glass_pane",
"8" : "minecraft:light_gray_stained_glass_pane",
"9" : "minecraft:cyan_stained_glass_pane",
"10" : "minecraft:purple_stained_glass_pane",
"11" : "minecraft:blue_stained_glass_pane",
"12" : "minecraft:brown_stained_glass_pane",
"13" : "minecraft:green_stained_glass_pane",
"14" : "minecraft:red_stained_glass_pane",
"15" : "minecraft:black_stained_glass_pane"
},
"minecraft:leaves" : {
"0" : "minecraft:oak_leaves",
"1" : "minecraft:spruce_leaves",
"2" : "minecraft:birch_leaves",
"3" : "minecraft:jungle_leaves",
"4" : "minecraft:acacia_leaves",
"5" : "minecraft:dark_oak_leaves"
},
"minecraft:sapling" : {
"0" : "minecraft:oak_sapling",
"1" : "minecraft:spruce_sapling",
"2" : "minecraft:birch_sapling",
"3" : "minecraft:jungle_sapling",
"4" : "minecraft:acacia_sapling",
"5" : "minecraft:dark_oak_sapling"
},
"minecraft:jungle_stairs" : {
"0" : "minecraft:jungle_stairs",
"1" : "minecraft:jungle_stairs",
"2" : "minecraft:jungle_stairs",
"3" : "minecraft:jungle_stairs",
"4" : "minecraft:jungle_stairs",
"5" : "minecraft:jungle_stairs",
"6" : "minecraft:jungle_stairs",
"7" : "minecraft:jungle_stairs"
},
"minecraft:fence_gate" : {
"0" : "minecraft:oak_fence_gate",
"1" : "minecraft:spruce_fence_gate",
"2" : "minecraft:birch_fence_gate",
"3" : "minecraft:jungle_fence_gate",
"4" : "minecraft:acacia_fence_gate",
"5" : "minecraft:dark_oak_fence_gate"
},
"minecraft:nether_brick_stairs" : {
"0" : "minecraft:nether_brick_stairs",
"1" : "minecraft:nether_brick_stairs",
"2" : "minecraft:nether_brick_stairs",
"3" : "minecraft:nether_brick_stairs",
"4" : "minecraft:nether_brick_stairs",
"5" : "minecraft:nether_brick_stairs",
"6" : "minecraft:nether_brick_stairs",
"7" : "minecraft:nether_brick_stairs"
}
}

File diff suppressed because it is too large Load diff

View file

@ -43,6 +43,9 @@ max-players: 100
# If debug messages should be sent through console
debug-mode: false
# UUID: DON'T CHANGE!
uuid: UUIDTESTUUIDTEST

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff