mirror of https://github.com/LOOHP/Limbo.git
Minecraft 1.21
This commit is contained in:
parent
dfbbc49f67
commit
642c7bd5f4
|
|
@ -1,6 +1,6 @@
|
|||
# Limbo
|
||||
[](http://ci.loohpjames.com/job/Limbo/)
|
||||
## Standalone Limbo Minecraft Server (Currently 1.20.6)
|
||||
## Standalone Limbo Minecraft Server (Currently 1.21)
|
||||
|
||||
### Starting the server
|
||||
Use the following command lines to start the limbo server just like any other minecraft server
|
||||
|
|
@ -16,7 +16,7 @@ IP: mc.loohpjames.com
|
|||
```
|
||||

|
||||
***
|
||||
### Downloads (1.17.1-1.20.6)
|
||||
### Downloads (1.17.1-1.21)
|
||||
- [Jenkins](http://ci.loohpjames.com/job/Limbo/)
|
||||
***
|
||||
### Maven
|
||||
|
|
|
|||
4
pom.xml
4
pom.xml
|
|
@ -24,7 +24,7 @@
|
|||
<groupId>com.loohp</groupId>
|
||||
<artifactId>Limbo</artifactId>
|
||||
<name>Limbo</name>
|
||||
<version>0.7.9-ALPHA</version>
|
||||
<version>0.7.10-ALPHA</version>
|
||||
|
||||
<description>Standalone Limbo Minecraft Server.</description>
|
||||
<url>https://github.com/LOOHP/Limbo</url>
|
||||
|
|
@ -136,7 +136,7 @@
|
|||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
<finalName>${project.artifactId}-${project.version}-1.20.6</finalName>
|
||||
<finalName>${project.artifactId}-${project.version}-1.21</finalName>
|
||||
</build>
|
||||
|
||||
<profiles>
|
||||
|
|
|
|||
|
|
@ -35,9 +35,6 @@ import com.loohp.limbo.inventory.InventoryType;
|
|||
import com.loohp.limbo.location.Location;
|
||||
import com.loohp.limbo.metrics.Metrics;
|
||||
import com.loohp.limbo.network.ServerConnection;
|
||||
import com.loohp.limbo.network.protocol.packets.Packet;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketIn;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketOut;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayOutBoss;
|
||||
import com.loohp.limbo.permissions.PermissionsManager;
|
||||
import com.loohp.limbo.player.Player;
|
||||
|
|
@ -60,7 +57,6 @@ import net.querz.nbt.io.NBTUtil;
|
|||
import net.querz.nbt.tag.CompoundTag;
|
||||
import org.json.simple.JSONArray;
|
||||
import org.json.simple.JSONObject;
|
||||
import org.json.simple.parser.JSONParser;
|
||||
import org.json.simple.parser.ParseException;
|
||||
|
||||
import javax.swing.UnsupportedLookAndFeelException;
|
||||
|
|
@ -74,13 +70,11 @@ import java.io.InputStreamReader;
|
|||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.net.URL;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Enumeration;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
|
@ -138,8 +132,8 @@ public final class Limbo {
|
|||
|
||||
//===========================
|
||||
|
||||
public final String SERVER_IMPLEMENTATION_VERSION = "1.20.6";
|
||||
public final int SERVER_IMPLEMENTATION_PROTOCOL = 766;
|
||||
public final String SERVER_IMPLEMENTATION_VERSION = "1.21";
|
||||
public final int SERVER_IMPLEMENTATION_PROTOCOL = 767;
|
||||
public final String LIMBO_IMPLEMENTATION_VERSION;
|
||||
|
||||
private final AtomicBoolean isRunning;
|
||||
|
|
@ -204,95 +198,6 @@ public final class Limbo {
|
|||
console.sendMessage("Starting Limbo server in bungeecord mode!");
|
||||
}
|
||||
|
||||
String mappingName = "mapping.json";
|
||||
InputStream mappingStream = getClass().getClassLoader().getResourceAsStream(mappingName);
|
||||
if (mappingStream == null) {
|
||||
throw new RuntimeException("Failed to load " + mappingName + " from jar!");
|
||||
}
|
||||
|
||||
console.sendMessage("Loading packet id mappings...");
|
||||
|
||||
InputStreamReader reader = new InputStreamReader(mappingStream, StandardCharsets.UTF_8);
|
||||
JSONObject json = (JSONObject) new JSONParser().parse(reader);
|
||||
reader.close();
|
||||
|
||||
String classPrefix = Packet.class.getName().substring(0, Packet.class.getName().lastIndexOf(".") + 1);
|
||||
int mappingsCount = 0;
|
||||
|
||||
Map<Integer, Class<? extends PacketIn>> HandshakeIn = new HashMap<>();
|
||||
for (Object key : ((JSONObject) json.get("HandshakeIn")).keySet()) {
|
||||
int packetId = Integer.decode((String) key);
|
||||
HandshakeIn.put(packetId, (Class<? extends PacketIn>) Class.forName(classPrefix + ((JSONObject) json.get("HandshakeIn")).get(key)));
|
||||
}
|
||||
Packet.setHandshakeIn(HandshakeIn);
|
||||
mappingsCount += HandshakeIn.size();
|
||||
|
||||
Map<Integer, Class<? extends PacketIn>> StatusIn = new HashMap<>();
|
||||
for (Object key : ((JSONObject) json.get("StatusIn")).keySet()) {
|
||||
int packetId = Integer.decode((String) key);
|
||||
StatusIn.put(packetId, (Class<? extends PacketIn>) Class.forName(classPrefix + ((JSONObject) json.get("StatusIn")).get(key)));
|
||||
}
|
||||
Packet.setStatusIn(StatusIn);
|
||||
mappingsCount += StatusIn.size();
|
||||
|
||||
Map<Class<? extends PacketOut>, Integer> StatusOut = new HashMap<>();
|
||||
for (Object key : ((JSONObject) json.get("StatusOut")).keySet()) {
|
||||
Class<? extends PacketOut> packetClass = (Class<? extends PacketOut>) Class.forName(classPrefix + key);
|
||||
StatusOut.put(packetClass, Integer.decode((String) ((JSONObject) json.get("StatusOut")).get(key)));
|
||||
}
|
||||
Packet.setStatusOut(StatusOut);
|
||||
mappingsCount += StatusOut.size();
|
||||
|
||||
Map<Integer, Class<? extends PacketIn>> LoginIn = new HashMap<>();
|
||||
for (Object key : ((JSONObject) json.get("LoginIn")).keySet()) {
|
||||
int packetId = Integer.decode((String) key);
|
||||
LoginIn.put(packetId, (Class<? extends PacketIn>) Class.forName(classPrefix + ((JSONObject) json.get("LoginIn")).get(key)));
|
||||
}
|
||||
Packet.setLoginIn(LoginIn);
|
||||
mappingsCount += LoginIn.size();
|
||||
|
||||
Map<Class<? extends PacketOut>, Integer> LoginOut = new HashMap<>();
|
||||
for (Object key : ((JSONObject) json.get("LoginOut")).keySet()) {
|
||||
Class<? extends PacketOut> packetClass = (Class<? extends PacketOut>) Class.forName(classPrefix + key);
|
||||
LoginOut.put(packetClass, Integer.decode((String) ((JSONObject) json.get("LoginOut")).get(key)));
|
||||
}
|
||||
Packet.setLoginOut(LoginOut);
|
||||
mappingsCount += LoginOut.size();
|
||||
|
||||
Map<Integer, Class<? extends PacketIn>> ConfigurationIn = new HashMap<>();
|
||||
for (Object key : ((JSONObject) json.get("ConfigurationIn")).keySet()) {
|
||||
int packetId = Integer.decode((String) key);
|
||||
ConfigurationIn.put(packetId, (Class<? extends PacketIn>) Class.forName(classPrefix + ((JSONObject) json.get("ConfigurationIn")).get(key)));
|
||||
}
|
||||
Packet.setConfigurationIn(ConfigurationIn);
|
||||
mappingsCount += ConfigurationIn.size();
|
||||
|
||||
Map<Class<? extends PacketOut>, Integer> ConfigurationOut = new HashMap<>();
|
||||
for (Object key : ((JSONObject) json.get("ConfigurationOut")).keySet()) {
|
||||
Class<? extends PacketOut> packetClass = (Class<? extends PacketOut>) Class.forName(classPrefix + key);
|
||||
ConfigurationOut.put(packetClass, Integer.decode((String) ((JSONObject) json.get("ConfigurationOut")).get(key)));
|
||||
}
|
||||
Packet.setConfigurationOut(ConfigurationOut);
|
||||
mappingsCount += ConfigurationOut.size();
|
||||
|
||||
Map<Integer, Class<? extends PacketIn>> PlayIn = new HashMap<>();
|
||||
for (Object key : ((JSONObject) json.get("PlayIn")).keySet()) {
|
||||
int packetId = Integer.decode((String) key);
|
||||
PlayIn.put(packetId, (Class<? extends PacketIn>) Class.forName(classPrefix + ((JSONObject) json.get("PlayIn")).get(key)));
|
||||
}
|
||||
Packet.setPlayIn(PlayIn);
|
||||
mappingsCount += PlayIn.size();
|
||||
|
||||
Map<Class<? extends PacketOut>, Integer> PlayOut = new HashMap<>();
|
||||
for (Object key : ((JSONObject) json.get("PlayOut")).keySet()) {
|
||||
Class<? extends PacketOut> packetClass = (Class<? extends PacketOut>) Class.forName(classPrefix + key);
|
||||
PlayOut.put(packetClass, Integer.decode((String) ((JSONObject) json.get("PlayOut")).get(key)));
|
||||
}
|
||||
Packet.setPlayOut(PlayOut);
|
||||
mappingsCount += PlayOut.size();
|
||||
|
||||
console.sendMessage("Loaded all " + mappingsCount + " packet id mappings!");
|
||||
|
||||
worlds.add(loadDefaultWorld());
|
||||
Location spawn = properties.getWorldSpawn();
|
||||
properties.setWorldSpawn(new Location(getWorld(properties.getLevelName().value()), spawn.getX(), spawn.getY(), spawn.getZ(), spawn.getYaw(), spawn.getPitch()));
|
||||
|
|
@ -346,7 +251,7 @@ public final class Limbo {
|
|||
}
|
||||
}
|
||||
|
||||
server = new ServerConnection(properties.getServerIp(), properties.getServerPort());
|
||||
server = new ServerConnection(properties.getServerIp(), properties.getServerPort(), false);
|
||||
|
||||
metrics = new Metrics();
|
||||
|
||||
|
|
|
|||
|
|
@ -43,7 +43,6 @@ import com.loohp.limbo.inventory.ItemStack;
|
|||
import com.loohp.limbo.location.Location;
|
||||
import com.loohp.limbo.network.protocol.packets.ClientboundFinishConfigurationPacket;
|
||||
import com.loohp.limbo.network.protocol.packets.ClientboundRegistryDataPacket;
|
||||
import com.loohp.limbo.network.protocol.packets.Packet;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketHandshakingIn;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketIn;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketLoginInLoginStart;
|
||||
|
|
@ -99,6 +98,7 @@ import com.loohp.limbo.network.protocol.packets.ServerboundLoginAcknowledgedPack
|
|||
import com.loohp.limbo.player.Player;
|
||||
import com.loohp.limbo.player.PlayerInteractManager;
|
||||
import com.loohp.limbo.player.PlayerInventory;
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
import com.loohp.limbo.registry.RegistryCustom;
|
||||
import com.loohp.limbo.utils.BungeecordAdventureConversionUtils;
|
||||
import com.loohp.limbo.utils.CheckedBiConsumer;
|
||||
|
|
@ -288,26 +288,7 @@ public class ClientConnection extends Thread {
|
|||
DataInput input = read.getDataInput();
|
||||
int size = read.getSize();
|
||||
int packetId = read.getPacketId();
|
||||
Class<? extends PacketIn> packetType;
|
||||
switch (state) {
|
||||
case HANDSHAKE:
|
||||
packetType = Packet.getHandshakeIn().get(packetId);
|
||||
break;
|
||||
case STATUS:
|
||||
packetType = Packet.getStatusIn().get(packetId);
|
||||
break;
|
||||
case LOGIN:
|
||||
packetType = Packet.getLoginIn().get(packetId);
|
||||
break;
|
||||
case CONFIGURATION:
|
||||
packetType = Packet.getConfigurationIn().get(packetId);
|
||||
break;
|
||||
case PLAY:
|
||||
packetType = Packet.getPlayIn().get(packetId);
|
||||
break;
|
||||
default:
|
||||
throw new IllegalStateException("Illegal ClientState!");
|
||||
}
|
||||
Class<? extends PacketIn> packetType = PacketRegistry.getPacketClass(packetId, PacketRegistry.NetworkPhase.fromClientState(state), PacketRegistry.PacketBound.SERVERBOUND);
|
||||
if (packetType == null) {
|
||||
input.skipBytes(size - DataTypeIO.getVarIntLength(packetId));
|
||||
return null;
|
||||
|
|
@ -569,22 +550,10 @@ public class ClientConnection extends Thread {
|
|||
|
||||
TimeUnit.MILLISECONDS.sleep(500);
|
||||
|
||||
ClientboundRegistryDataPacket registryDataPacket1 = new ClientboundRegistryDataPacket(RegistryCustom.WORLDGEN_BIOME);
|
||||
sendPacket(registryDataPacket1);
|
||||
ClientboundRegistryDataPacket registryDataPacket2 = new ClientboundRegistryDataPacket(RegistryCustom.CHAT_TYPE);
|
||||
sendPacket(registryDataPacket2);
|
||||
ClientboundRegistryDataPacket registryDataPacket3 = new ClientboundRegistryDataPacket(RegistryCustom.TRIM_PATTERN);
|
||||
sendPacket(registryDataPacket3);
|
||||
ClientboundRegistryDataPacket registryDataPacket4 = new ClientboundRegistryDataPacket(RegistryCustom.TRIM_MATERIAL);
|
||||
sendPacket(registryDataPacket4);
|
||||
ClientboundRegistryDataPacket registryDataPacket5 = new ClientboundRegistryDataPacket(RegistryCustom.WOLF_VARIANT);
|
||||
sendPacket(registryDataPacket5);
|
||||
ClientboundRegistryDataPacket registryDataPacket6 = new ClientboundRegistryDataPacket(RegistryCustom.DIMENSION_TYPE);
|
||||
sendPacket(registryDataPacket6);
|
||||
ClientboundRegistryDataPacket registryDataPacket7 = new ClientboundRegistryDataPacket(RegistryCustom.DAMAGE_TYPE);
|
||||
sendPacket(registryDataPacket7);
|
||||
ClientboundRegistryDataPacket registryDataPacket8 = new ClientboundRegistryDataPacket(RegistryCustom.BANNER_PATTERN);
|
||||
sendPacket(registryDataPacket8);
|
||||
for (RegistryCustom registryCustom : RegistryCustom.getRegistries()) {
|
||||
ClientboundRegistryDataPacket registryDataPacket = new ClientboundRegistryDataPacket(registryCustom);
|
||||
sendPacket(registryDataPacket);
|
||||
}
|
||||
|
||||
ClientboundFinishConfigurationPacket clientboundFinishConfigurationPacket = new ClientboundFinishConfigurationPacket();
|
||||
sendPacket(clientboundFinishConfigurationPacket);
|
||||
|
|
|
|||
|
|
@ -30,15 +30,17 @@ import java.util.List;
|
|||
|
||||
public class ServerConnection extends Thread {
|
||||
|
||||
private final String ip;
|
||||
private final int port;
|
||||
private final boolean silent;
|
||||
private ServerSocket serverSocket;
|
||||
private List<ClientConnection> clients;
|
||||
private String ip;
|
||||
private int port;
|
||||
|
||||
public ServerConnection(String ip, int port) {
|
||||
clients = new ArrayList<ClientConnection>();
|
||||
public ServerConnection(String ip, int port, boolean silent) {
|
||||
this.clients = new ArrayList<>();
|
||||
this.ip = ip;
|
||||
this.port = port;
|
||||
this.silent = silent;
|
||||
start();
|
||||
}
|
||||
|
||||
|
|
@ -46,7 +48,9 @@ public class ServerConnection extends Thread {
|
|||
public void run() {
|
||||
try {
|
||||
serverSocket = new ServerSocket(port, 50, InetAddress.getByName(ip));
|
||||
Limbo.getInstance().getConsole().sendMessage("Limbo server listening on /" + serverSocket.getInetAddress().getHostName() + ":" + serverSocket.getLocalPort());
|
||||
if (!silent) {
|
||||
Limbo.getInstance().getConsole().sendMessage("Limbo server listening on /" + serverSocket.getInetAddress().getHostName() + ":" + serverSocket.getLocalPort());
|
||||
}
|
||||
while (true) {
|
||||
Socket connection = serverSocket.accept();
|
||||
ClientConnection sc = new ClientConnection(connection);
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
import com.loohp.limbo.utils.DataTypeIO;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
|
|
@ -42,7 +43,7 @@ public class ClientboundChunkBatchFinishedPacket extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getPlayOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
|
||||
DataTypeIO.writeVarInt(output, batchSize);
|
||||
|
||||
|
|
|
|||
|
|
@ -19,6 +19,8 @@
|
|||
|
||||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.IOException;
|
||||
|
|
@ -33,7 +35,7 @@ public class ClientboundChunkBatchStartPacket extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getPlayOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
|
||||
return buffer.toByteArray();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,13 +19,15 @@
|
|||
|
||||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
public class ClientboundClearTitlesPacket extends PacketOut {
|
||||
|
||||
private boolean reset;
|
||||
private final boolean reset;
|
||||
|
||||
public ClientboundClearTitlesPacket(boolean reset) {
|
||||
this.reset = reset;
|
||||
|
|
@ -40,7 +42,7 @@ public class ClientboundClearTitlesPacket extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getPlayOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
output.writeBoolean(reset);
|
||||
|
||||
return buffer.toByteArray();
|
||||
|
|
|
|||
|
|
@ -19,6 +19,8 @@
|
|||
|
||||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.IOException;
|
||||
|
|
@ -33,7 +35,7 @@ public class ClientboundFinishConfigurationPacket extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getConfigurationOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
|
||||
return buffer.toByteArray();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@
|
|||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.registry.BuiltInRegistries;
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
import com.loohp.limbo.utils.BitsUtils;
|
||||
import com.loohp.limbo.utils.DataTypeIO;
|
||||
import com.loohp.limbo.world.Environment;
|
||||
|
|
@ -40,16 +41,16 @@ import java.util.List;
|
|||
|
||||
public class ClientboundLevelChunkWithLightPacket extends PacketOut {
|
||||
|
||||
private int chunkX;
|
||||
private int chunkZ;
|
||||
private Chunk chunk;
|
||||
private Environment environment;
|
||||
private long[] skyLightBitMasks;
|
||||
private long[] blockLightBitMasks;
|
||||
private long[] skyLightBitMasksEmpty;
|
||||
private long[] blockLightBitMasksEmpty;
|
||||
private List<Byte[]> skylightArrays;
|
||||
private List<Byte[]> blocklightArrays;
|
||||
private final int chunkX;
|
||||
private final int chunkZ;
|
||||
private final Chunk chunk;
|
||||
private final Environment environment;
|
||||
private final long[] skyLightBitMasks;
|
||||
private final long[] blockLightBitMasks;
|
||||
private final long[] skyLightBitMasksEmpty;
|
||||
private final long[] blockLightBitMasksEmpty;
|
||||
private final List<Byte[]> skylightArrays;
|
||||
private final List<Byte[]> blocklightArrays;
|
||||
|
||||
public ClientboundLevelChunkWithLightPacket(int chunkX, int chunkZ, Chunk chunk, Environment environment, List<Byte[]> skylightArrays, List<Byte[]> blocklightArrays) {
|
||||
this.chunkX = chunkX;
|
||||
|
|
@ -115,7 +116,7 @@ public class ClientboundLevelChunkWithLightPacket extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getPlayOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
|
||||
output.writeInt(chunkX);
|
||||
output.writeInt(chunkZ);
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
import com.loohp.limbo.registry.RegistryCustom;
|
||||
import com.loohp.limbo.utils.DataTypeIO;
|
||||
import net.kyori.adventure.key.Key;
|
||||
|
|
@ -47,7 +48,7 @@ public class ClientboundRegistryDataPacket extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getConfigurationOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
|
||||
DataTypeIO.writeString(output, registry.getIdentifier().asString(), StandardCharsets.UTF_8);
|
||||
DataTypeIO.writeVarInt(output, registry.getEntries().size());
|
||||
|
|
|
|||
|
|
@ -19,9 +19,9 @@
|
|||
|
||||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
import com.loohp.limbo.utils.DataTypeIO;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.DataOutputStream;
|
||||
|
|
@ -75,7 +75,7 @@ public class ClientboundResourcePackPushPacket extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getPlayOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
DataTypeIO.writeUUID(output, id);
|
||||
DataTypeIO.writeString(output, url, StandardCharsets.UTF_8);
|
||||
DataTypeIO.writeString(output, hash, StandardCharsets.UTF_8);
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
import com.loohp.limbo.utils.DataTypeIO;
|
||||
import net.kyori.adventure.text.Component;
|
||||
|
||||
|
|
@ -28,7 +29,7 @@ import java.io.IOException;
|
|||
|
||||
public class ClientboundSetActionBarTextPacket extends PacketOut {
|
||||
|
||||
private Component actionBar;
|
||||
private final Component actionBar;
|
||||
|
||||
public ClientboundSetActionBarTextPacket(Component actionBar) {
|
||||
this.actionBar = actionBar;
|
||||
|
|
@ -43,7 +44,7 @@ public class ClientboundSetActionBarTextPacket extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getPlayOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
DataTypeIO.writeComponent(output, actionBar);
|
||||
|
||||
return buffer.toByteArray();
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
import com.loohp.limbo.utils.DataTypeIO;
|
||||
import net.kyori.adventure.text.Component;
|
||||
|
||||
|
|
@ -28,7 +29,7 @@ import java.io.IOException;
|
|||
|
||||
public class ClientboundSetSubtitleTextPacket extends PacketOut {
|
||||
|
||||
private Component subTitle;
|
||||
private final Component subTitle;
|
||||
|
||||
public ClientboundSetSubtitleTextPacket(Component subTitle) {
|
||||
this.subTitle = subTitle;
|
||||
|
|
@ -43,7 +44,7 @@ public class ClientboundSetSubtitleTextPacket extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getPlayOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
DataTypeIO.writeComponent(output, subTitle);
|
||||
|
||||
return buffer.toByteArray();
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
import com.loohp.limbo.utils.DataTypeIO;
|
||||
import net.kyori.adventure.text.Component;
|
||||
|
||||
|
|
@ -28,7 +29,7 @@ import java.io.IOException;
|
|||
|
||||
public class ClientboundSetTitleTextPacket extends PacketOut {
|
||||
|
||||
private Component titleText;
|
||||
private final Component titleText;
|
||||
|
||||
public ClientboundSetTitleTextPacket(Component titleText) {
|
||||
this.titleText = titleText;
|
||||
|
|
@ -43,7 +44,7 @@ public class ClientboundSetTitleTextPacket extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getPlayOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
DataTypeIO.writeComponent(output, titleText);
|
||||
|
||||
return buffer.toByteArray();
|
||||
|
|
|
|||
|
|
@ -19,15 +19,17 @@
|
|||
|
||||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
public class ClientboundSetTitlesAnimationPacket extends PacketOut {
|
||||
|
||||
private int fadeIn;
|
||||
private int stay;
|
||||
private int fadeOut;
|
||||
private final int fadeIn;
|
||||
private final int stay;
|
||||
private final int fadeOut;
|
||||
|
||||
public ClientboundSetTitlesAnimationPacket(int fadeIn, int stay, int fadeOut) {
|
||||
this.fadeIn = fadeIn;
|
||||
|
|
@ -52,7 +54,7 @@ public class ClientboundSetTitlesAnimationPacket extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getPlayOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
|
||||
output.writeInt(fadeIn);
|
||||
output.writeInt(stay);
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
import com.loohp.limbo.utils.DataTypeIO;
|
||||
import net.kyori.adventure.text.Component;
|
||||
|
||||
|
|
@ -28,8 +29,8 @@ import java.io.IOException;
|
|||
|
||||
public class ClientboundSystemChatPacket extends PacketOut {
|
||||
|
||||
private Component message;
|
||||
private boolean overlay;
|
||||
private final Component message;
|
||||
private final boolean overlay;
|
||||
|
||||
public ClientboundSystemChatPacket(Component message, boolean overlay) {
|
||||
this.message = message;
|
||||
|
|
@ -49,7 +50,7 @@ public class ClientboundSystemChatPacket extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getPlayOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
DataTypeIO.writeComponent(output, message);
|
||||
output.writeBoolean(overlay);
|
||||
|
||||
|
|
|
|||
|
|
@ -20,112 +20,12 @@
|
|||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.network.ClientConnection;
|
||||
|
||||
import java.util.Map;
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
|
||||
public abstract class Packet {
|
||||
|
||||
private static Map<Integer, Class<? extends PacketIn>> handshakeIn;
|
||||
|
||||
private static Map<Integer, Class<? extends PacketIn>> statusIn;
|
||||
private static Map<Class<? extends PacketOut>, Integer> statusOut;
|
||||
|
||||
private static Map<Integer, Class<? extends PacketIn>> loginIn;
|
||||
private static Map<Class<? extends PacketOut>, Integer> loginOut;
|
||||
|
||||
private static Map<Integer, Class<? extends PacketIn>> configurationIn;
|
||||
private static Map<Class<? extends PacketOut>, Integer> configurationOut;
|
||||
|
||||
private static Map<Integer, Class<? extends PacketIn>> playIn;
|
||||
private static Map<Class<? extends PacketOut>, Integer> playOut;
|
||||
|
||||
public static Map<Integer, Class<? extends PacketIn>> getHandshakeIn() {
|
||||
return handshakeIn;
|
||||
}
|
||||
|
||||
public static void setHandshakeIn(Map<Integer, Class<? extends PacketIn>> handshakeIn) {
|
||||
Packet.handshakeIn = handshakeIn;
|
||||
}
|
||||
|
||||
public static Map<Integer, Class<? extends PacketIn>> getStatusIn() {
|
||||
return statusIn;
|
||||
}
|
||||
|
||||
public static void setStatusIn(Map<Integer, Class<? extends PacketIn>> statusIn) {
|
||||
Packet.statusIn = statusIn;
|
||||
}
|
||||
|
||||
public static Map<Class<? extends PacketOut>, Integer> getStatusOut() {
|
||||
return statusOut;
|
||||
}
|
||||
|
||||
public static void setStatusOut(Map<Class<? extends PacketOut>, Integer> statusOut) {
|
||||
Packet.statusOut = statusOut;
|
||||
}
|
||||
|
||||
public static Map<Integer, Class<? extends PacketIn>> getLoginIn() {
|
||||
return loginIn;
|
||||
}
|
||||
|
||||
public static void setLoginIn(Map<Integer, Class<? extends PacketIn>> loginIn) {
|
||||
Packet.loginIn = loginIn;
|
||||
}
|
||||
|
||||
public static Map<Class<? extends PacketOut>, Integer> getLoginOut() {
|
||||
return loginOut;
|
||||
}
|
||||
|
||||
public static void setLoginOut(Map<Class<? extends PacketOut>, Integer> loginOut) {
|
||||
Packet.loginOut = loginOut;
|
||||
}
|
||||
|
||||
public static Map<Integer, Class<? extends PacketIn>> getConfigurationIn() {
|
||||
return configurationIn;
|
||||
}
|
||||
|
||||
public static void setConfigurationIn(Map<Integer, Class<? extends PacketIn>> configurationIn) {
|
||||
Packet.configurationIn = configurationIn;
|
||||
}
|
||||
|
||||
public static Map<Class<? extends PacketOut>, Integer> getConfigurationOut() {
|
||||
return configurationOut;
|
||||
}
|
||||
|
||||
public static void setConfigurationOut(Map<Class<? extends PacketOut>, Integer> configurationOut) {
|
||||
Packet.configurationOut = configurationOut;
|
||||
}
|
||||
|
||||
public static Map<Integer, Class<? extends PacketIn>> getPlayIn() {
|
||||
return playIn;
|
||||
}
|
||||
|
||||
public static void setPlayIn(Map<Integer, Class<? extends PacketIn>> playIn) {
|
||||
Packet.playIn = playIn;
|
||||
}
|
||||
|
||||
public static Map<Class<? extends PacketOut>, Integer> getPlayOut() {
|
||||
return playOut;
|
||||
}
|
||||
|
||||
public static void setPlayOut(Map<Class<? extends PacketOut>, Integer> playOut) {
|
||||
Packet.playOut = playOut;
|
||||
}
|
||||
|
||||
public ClientConnection.ClientState getPacketState() {
|
||||
Class<? extends Packet> type = getClass();
|
||||
if (handshakeIn.containsValue(type)) {
|
||||
return ClientConnection.ClientState.HANDSHAKE;
|
||||
} else if (statusIn.containsValue(type) || statusOut.containsKey(type)) {
|
||||
return ClientConnection.ClientState.STATUS;
|
||||
} else if (loginIn.containsValue(type) || loginOut.containsKey(type)) {
|
||||
return ClientConnection.ClientState.LOGIN;
|
||||
} else if (configurationIn.containsValue(type) || configurationOut.containsKey(type)) {
|
||||
return ClientConnection.ClientState.CONFIGURATION;
|
||||
} else if (playIn.containsValue(type) || playOut.containsKey(type)) {
|
||||
return ClientConnection.ClientState.PLAY;
|
||||
} else {
|
||||
throw new IllegalStateException("This packet of class " + type + " is not registered!");
|
||||
}
|
||||
return PacketRegistry.getPacketInfo(getClass()).getNetworkPhase().getClientState();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -54,10 +54,10 @@ public class PacketHandshakingIn extends PacketIn {
|
|||
|
||||
//==============================
|
||||
|
||||
private int protocolVersion;
|
||||
private String serverAddress;
|
||||
private int serverPort;
|
||||
private HandshakeType handshakeType;
|
||||
private final int protocolVersion;
|
||||
private final String serverAddress;
|
||||
private final int serverPort;
|
||||
private final HandshakeType handshakeType;
|
||||
|
||||
public PacketHandshakingIn(int protocolVersion, String serverAddress, int serverPort, HandshakeType handshakeType) {
|
||||
this.protocolVersion = protocolVersion;
|
||||
|
|
|
|||
|
|
@ -27,9 +27,9 @@ import java.util.Optional;
|
|||
|
||||
public class PacketLoginInPluginMessaging extends PacketIn {
|
||||
|
||||
private int messageId;
|
||||
private boolean successful;
|
||||
private Optional<byte[]> data;
|
||||
private final int messageId;
|
||||
private final boolean successful;
|
||||
private final Optional<byte[]> data;
|
||||
|
||||
public PacketLoginInPluginMessaging(int messageId, boolean successful, byte[] data) {
|
||||
this.messageId = messageId;
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
import com.loohp.limbo.utils.DataTypeIO;
|
||||
import net.kyori.adventure.text.Component;
|
||||
|
||||
|
|
@ -28,7 +29,7 @@ import java.io.IOException;
|
|||
|
||||
public class PacketLoginOutDisconnect extends PacketOut {
|
||||
|
||||
private Component reason;
|
||||
private final Component reason;
|
||||
|
||||
public PacketLoginOutDisconnect(Component reason) {
|
||||
this.reason = reason;
|
||||
|
|
@ -43,7 +44,7 @@ public class PacketLoginOutDisconnect extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getLoginOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
DataTypeIO.writeComponent(output, reason);
|
||||
|
||||
return buffer.toByteArray();
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
import com.loohp.limbo.utils.DataTypeIO;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
|
|
@ -56,7 +57,7 @@ public class PacketLoginOutLoginSuccess extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getLoginOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
DataTypeIO.writeUUID(output, uuid);
|
||||
DataTypeIO.writeString(output, username, StandardCharsets.UTF_8);
|
||||
DataTypeIO.writeVarInt(output, 0);
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
import com.loohp.limbo.utils.DataTypeIO;
|
||||
import net.kyori.adventure.key.Key;
|
||||
|
||||
|
|
@ -29,9 +30,9 @@ import java.nio.charset.StandardCharsets;
|
|||
|
||||
public class PacketLoginOutPluginMessaging extends PacketOut {
|
||||
|
||||
private int messageId;
|
||||
private Key channel;
|
||||
private byte[] data;
|
||||
private final int messageId;
|
||||
private final Key channel;
|
||||
private final byte[] data;
|
||||
|
||||
public PacketLoginOutPluginMessaging(int messageId, Key channel) {
|
||||
this(messageId, channel, null);
|
||||
|
|
@ -60,7 +61,7 @@ public class PacketLoginOutPluginMessaging extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getLoginOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
DataTypeIO.writeVarInt(output, messageId);
|
||||
DataTypeIO.writeString(output, channel.toString(), StandardCharsets.UTF_8);
|
||||
if (data != null) {
|
||||
|
|
|
|||
|
|
@ -40,10 +40,10 @@ public class PacketPlayInBlockDig extends PacketIn {
|
|||
|
||||
}
|
||||
|
||||
private PlayerDigType action;
|
||||
private BlockPosition pos;
|
||||
private BlockFace direction;
|
||||
private int sequence;
|
||||
private final PlayerDigType action;
|
||||
private final BlockPosition pos;
|
||||
private final BlockFace direction;
|
||||
private final int sequence;
|
||||
|
||||
public PacketPlayInBlockDig(PlayerDigType action, BlockPosition pos, BlockFace direction, int sequence) {
|
||||
this.action = action;
|
||||
|
|
|
|||
|
|
@ -27,8 +27,8 @@ import java.io.IOException;
|
|||
|
||||
public class PacketPlayInBlockPlace extends PacketIn {
|
||||
|
||||
private EquipmentSlot hand;
|
||||
private int sequence;
|
||||
private final EquipmentSlot hand;
|
||||
private final int sequence;
|
||||
|
||||
public PacketPlayInBlockPlace(EquipmentSlot hand, int sequence) {
|
||||
this.hand = hand;
|
||||
|
|
|
|||
|
|
@ -30,11 +30,11 @@ import java.time.Instant;
|
|||
|
||||
public class PacketPlayInChat extends PacketIn {
|
||||
|
||||
private String message;
|
||||
private Instant time;
|
||||
private long salt;
|
||||
private MessageSignature signature;
|
||||
private LastSeenMessages.b lastSeenMessages;
|
||||
private final String message;
|
||||
private final Instant time;
|
||||
private final long salt;
|
||||
private final MessageSignature signature;
|
||||
private final LastSeenMessages.b lastSeenMessages;
|
||||
|
||||
public PacketPlayInChat(String message, Instant time, long salt, MessageSignature signature, LastSeenMessages.b lastSeenMessages) {
|
||||
this.message = message;
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ import java.io.IOException;
|
|||
|
||||
public class PacketPlayInCloseWindow extends PacketIn {
|
||||
|
||||
private int containerId;
|
||||
private final int containerId;
|
||||
|
||||
public PacketPlayInCloseWindow(int containerId) {
|
||||
this.containerId = containerId;
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ import java.io.IOException;
|
|||
|
||||
public class PacketPlayInHeldItemChange extends PacketIn {
|
||||
|
||||
private short slot;
|
||||
private final short slot;
|
||||
|
||||
public PacketPlayInHeldItemChange(short slot) {
|
||||
this.slot = slot;
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ import java.nio.charset.StandardCharsets;
|
|||
|
||||
public class PacketPlayInItemName extends PacketIn {
|
||||
|
||||
private String name;
|
||||
private final String name;
|
||||
|
||||
public PacketPlayInItemName(String name) {
|
||||
this.name = name;
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ import java.io.IOException;
|
|||
|
||||
public class PacketPlayInKeepAlive extends PacketIn {
|
||||
|
||||
private long payload;
|
||||
private final long payload;
|
||||
|
||||
public PacketPlayInKeepAlive(long payload) {
|
||||
this.payload = payload;
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ import java.io.IOException;
|
|||
|
||||
public class PacketPlayInPickItem extends PacketIn {
|
||||
|
||||
private int slot;
|
||||
private final int slot;
|
||||
|
||||
public PacketPlayInPickItem(int slot) {
|
||||
this.slot = slot;
|
||||
|
|
|
|||
|
|
@ -27,8 +27,8 @@ import java.nio.charset.StandardCharsets;
|
|||
|
||||
public class PacketPlayInPluginMessaging extends PacketIn {
|
||||
|
||||
private String channel;
|
||||
private byte[] data;
|
||||
private final String channel;
|
||||
private final byte[] data;
|
||||
|
||||
public PacketPlayInPluginMessaging(String channel, byte[] data) {
|
||||
this.channel = channel;
|
||||
|
|
|
|||
|
|
@ -24,10 +24,10 @@ import java.io.IOException;
|
|||
|
||||
public class PacketPlayInPosition extends PacketIn {
|
||||
|
||||
private double x;
|
||||
private double y;
|
||||
private double z;
|
||||
private boolean onGround;
|
||||
private final double x;
|
||||
private final double y;
|
||||
private final double z;
|
||||
private final boolean onGround;
|
||||
|
||||
public PacketPlayInPosition(double x, double y, double z, boolean onGround) {
|
||||
this.x = x;
|
||||
|
|
|
|||
|
|
@ -24,12 +24,12 @@ import java.io.IOException;
|
|||
|
||||
public class PacketPlayInPositionAndLook extends PacketIn {
|
||||
|
||||
private double x;
|
||||
private double y;
|
||||
private double z;
|
||||
private float yaw;
|
||||
private float pitch;
|
||||
private boolean onGround;
|
||||
private final double x;
|
||||
private final double y;
|
||||
private final double z;
|
||||
private final float yaw;
|
||||
private final float pitch;
|
||||
private final boolean onGround;
|
||||
|
||||
public PacketPlayInPositionAndLook(double x, double y, double z, float yaw, float pitch, boolean onGround) {
|
||||
this.x = x;
|
||||
|
|
|
|||
|
|
@ -24,9 +24,9 @@ import java.io.IOException;
|
|||
|
||||
public class PacketPlayInRotation extends PacketIn {
|
||||
|
||||
private float yaw;
|
||||
private float pitch;
|
||||
private boolean onGround;
|
||||
private final float yaw;
|
||||
private final float pitch;
|
||||
private final boolean onGround;
|
||||
|
||||
public PacketPlayInRotation(float yaw, float pitch, boolean onGround) {
|
||||
this.yaw = yaw;
|
||||
|
|
|
|||
|
|
@ -27,8 +27,8 @@ import java.nio.charset.StandardCharsets;
|
|||
|
||||
public class PacketPlayInTabComplete extends PacketIn {
|
||||
|
||||
private int id;
|
||||
private String text;
|
||||
private final int id;
|
||||
private final String text;
|
||||
|
||||
public PacketPlayInTabComplete(int id, String text) {
|
||||
this.id = id;
|
||||
|
|
|
|||
|
|
@ -28,9 +28,9 @@ import java.io.IOException;
|
|||
|
||||
public class PacketPlayInUseItem extends PacketIn {
|
||||
|
||||
private EquipmentSlot hand;
|
||||
private MovingObjectPositionBlock blockHit;
|
||||
private int sequence;
|
||||
private final EquipmentSlot hand;
|
||||
private final MovingObjectPositionBlock blockHit;
|
||||
private final int sequence;
|
||||
|
||||
public PacketPlayInUseItem(EquipmentSlot hand, MovingObjectPositionBlock blockHit, int sequence) {
|
||||
this.hand = hand;
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@
|
|||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.bossbar.KeyedBossBar;
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
import com.loohp.limbo.utils.DataTypeIO;
|
||||
import net.kyori.adventure.bossbar.BossBar;
|
||||
|
||||
|
|
@ -52,8 +53,8 @@ public class PacketPlayOutBoss extends PacketOut {
|
|||
return i;
|
||||
}
|
||||
|
||||
private KeyedBossBar bossBar;
|
||||
private BossBarAction action;
|
||||
private final KeyedBossBar bossBar;
|
||||
private final BossBarAction action;
|
||||
|
||||
public PacketPlayOutBoss(KeyedBossBar bossBar, BossBarAction action) {
|
||||
this.bossBar = bossBar;
|
||||
|
|
@ -73,7 +74,7 @@ public class PacketPlayOutBoss extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getPlayOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
|
||||
DataTypeIO.writeUUID(output, bossBar.getUniqueId());
|
||||
DataTypeIO.writeVarInt(output, action.ordinal());
|
||||
|
|
|
|||
|
|
@ -19,13 +19,15 @@
|
|||
|
||||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
public class PacketPlayOutCloseWindow extends PacketOut {
|
||||
|
||||
private int containerId;
|
||||
private final int containerId;
|
||||
|
||||
public PacketPlayOutCloseWindow(int containerId) {
|
||||
this.containerId = containerId;
|
||||
|
|
@ -40,7 +42,7 @@ public class PacketPlayOutCloseWindow extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getPlayOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
|
||||
output.writeByte(containerId);
|
||||
|
||||
|
|
|
|||
|
|
@ -19,13 +19,15 @@
|
|||
|
||||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
public class PacketPlayOutDeclareCommands extends PacketOut {
|
||||
|
||||
private byte[] data;
|
||||
private final byte[] data;
|
||||
|
||||
public PacketPlayOutDeclareCommands(byte[] data) {
|
||||
this.data = data;
|
||||
|
|
@ -40,7 +42,7 @@ public class PacketPlayOutDeclareCommands extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getPlayOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
output.write(data);
|
||||
|
||||
return buffer.toByteArray();
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
import com.loohp.limbo.utils.DataTypeIO;
|
||||
import net.kyori.adventure.text.Component;
|
||||
|
||||
|
|
@ -28,7 +29,7 @@ import java.io.IOException;
|
|||
|
||||
public class PacketPlayOutDisconnect extends PacketOut {
|
||||
|
||||
private Component reason;
|
||||
private final Component reason;
|
||||
|
||||
public PacketPlayOutDisconnect(Component reason) {
|
||||
this.reason = reason;
|
||||
|
|
@ -43,7 +44,7 @@ public class PacketPlayOutDisconnect extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getPlayOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
DataTypeIO.writeComponent(output, reason);
|
||||
|
||||
return buffer.toByteArray();
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
import com.loohp.limbo.utils.DataTypeIO;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
|
|
@ -27,7 +28,7 @@ import java.io.IOException;
|
|||
|
||||
public class PacketPlayOutEntityDestroy extends PacketOut {
|
||||
|
||||
private int[] entityIds;
|
||||
private final int[] entityIds;
|
||||
|
||||
public PacketPlayOutEntityDestroy(int... entityIds) {
|
||||
this.entityIds = entityIds;
|
||||
|
|
@ -42,7 +43,7 @@ public class PacketPlayOutEntityDestroy extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getPlayOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
DataTypeIO.writeVarInt(output, entityIds.length);
|
||||
for (int entityId : entityIds) {
|
||||
DataTypeIO.writeVarInt(output, entityId);
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import com.loohp.limbo.entity.DataWatcher.WatchableObject;
|
|||
import com.loohp.limbo.entity.DataWatcher.WatchableObjectType;
|
||||
import com.loohp.limbo.entity.Entity;
|
||||
import com.loohp.limbo.entity.Pose;
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
import com.loohp.limbo.utils.DataTypeIO;
|
||||
import com.loohp.limbo.utils.Rotation3f;
|
||||
import com.loohp.limbo.world.BlockPosition;
|
||||
|
|
@ -45,9 +46,9 @@ public class PacketPlayOutEntityMetadata extends PacketOut {
|
|||
|
||||
public static final int END_OFF_METADATA = 0xff;
|
||||
|
||||
private Entity entity;
|
||||
public boolean allFields;
|
||||
public Field[] fields;
|
||||
private final Entity entity;
|
||||
public final boolean allFields;
|
||||
public final Field[] fields;
|
||||
|
||||
public PacketPlayOutEntityMetadata(Entity entity, boolean allFields, Field... fields) {
|
||||
this.entity = entity;
|
||||
|
|
@ -68,7 +69,7 @@ public class PacketPlayOutEntityMetadata extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getPlayOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
DataTypeIO.writeVarInt(output, entity.getEntityId());
|
||||
Collection<WatchableObject> watches;
|
||||
if (allFields) {
|
||||
|
|
|
|||
|
|
@ -19,6 +19,8 @@
|
|||
|
||||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.IOException;
|
||||
|
|
@ -52,8 +54,8 @@ public class PacketPlayOutGameStateChange extends PacketOut {
|
|||
}
|
||||
}
|
||||
|
||||
private GameStateChangeEvent event;
|
||||
private float value;
|
||||
private final GameStateChangeEvent event;
|
||||
private final float value;
|
||||
|
||||
public PacketPlayOutGameStateChange(GameStateChangeEvent event, float value) {
|
||||
this.event = event;
|
||||
|
|
@ -72,7 +74,7 @@ public class PacketPlayOutGameStateChange extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getPlayOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
output.writeByte(event.getId());
|
||||
output.writeFloat(value);
|
||||
|
||||
|
|
|
|||
|
|
@ -19,6 +19,8 @@
|
|||
|
||||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.IOException;
|
||||
|
|
@ -40,7 +42,7 @@ public class PacketPlayOutHeldItemChange extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getPlayOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
output.writeByte(slot);
|
||||
|
||||
return buffer.toByteArray();
|
||||
|
|
|
|||
|
|
@ -19,13 +19,15 @@
|
|||
|
||||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
public class PacketPlayOutKeepAlive extends PacketOut {
|
||||
|
||||
private long payload;
|
||||
private final long payload;
|
||||
|
||||
public PacketPlayOutKeepAlive(long payload) {
|
||||
this.payload = payload;
|
||||
|
|
@ -40,7 +42,7 @@ public class PacketPlayOutKeepAlive extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getPlayOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
output.writeLong(payload);
|
||||
|
||||
return buffer.toByteArray();
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
import com.loohp.limbo.registry.RegistryCustom;
|
||||
import com.loohp.limbo.utils.DataTypeIO;
|
||||
import com.loohp.limbo.utils.GameMode;
|
||||
|
|
@ -145,7 +146,7 @@ public class PacketPlayOutLogin extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getPlayOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
output.writeInt(entityId);
|
||||
output.writeBoolean(isHardcore);
|
||||
DataTypeIO.writeVarInt(output, worlds.size());
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
import com.loohp.limbo.sounds.SoundEffect;
|
||||
import com.loohp.limbo.utils.DataTypeIO;
|
||||
import net.kyori.adventure.sound.Sound;
|
||||
|
|
@ -31,14 +32,14 @@ import java.util.Optional;
|
|||
|
||||
public class PacketPlayOutNamedSoundEffect extends PacketOut {
|
||||
|
||||
private SoundEffect sound;
|
||||
private Sound.Source source;
|
||||
private int x;
|
||||
private int y;
|
||||
private int z;
|
||||
private float volume;
|
||||
private float pitch;
|
||||
private long seed;
|
||||
private final SoundEffect sound;
|
||||
private final Sound.Source source;
|
||||
private final int x;
|
||||
private final int y;
|
||||
private final int z;
|
||||
private final float volume;
|
||||
private final float pitch;
|
||||
private final long seed;
|
||||
|
||||
public PacketPlayOutNamedSoundEffect(SoundEffect sound, Sound.Source source, double x, double y, double z, float volume, float pitch, long seed) {
|
||||
this.sound = sound;
|
||||
|
|
@ -88,7 +89,7 @@ public class PacketPlayOutNamedSoundEffect extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getPlayOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
|
||||
DataTypeIO.writeVarInt(output, 0);
|
||||
DataTypeIO.writeString(output, sound.getSound().toString(), StandardCharsets.UTF_8);
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@
|
|||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.registry.BuiltInRegistries;
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
import com.loohp.limbo.utils.DataTypeIO;
|
||||
import net.kyori.adventure.key.Key;
|
||||
import net.kyori.adventure.text.Component;
|
||||
|
|
@ -30,9 +31,9 @@ import java.io.IOException;
|
|||
|
||||
public class PacketPlayOutOpenWindow extends PacketOut {
|
||||
|
||||
private int containerId;
|
||||
private Key type;
|
||||
private Component title;
|
||||
private final int containerId;
|
||||
private final Key type;
|
||||
private final Component title;
|
||||
|
||||
public PacketPlayOutOpenWindow(int containerId, Key type, Component title) {
|
||||
this.containerId = containerId;
|
||||
|
|
@ -57,7 +58,7 @@ public class PacketPlayOutOpenWindow extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getPlayOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
|
||||
DataTypeIO.writeVarInt(output, containerId);
|
||||
DataTypeIO.writeVarInt(output, BuiltInRegistries.MENU_REGISTRY.getId(type));
|
||||
|
|
|
|||
|
|
@ -19,6 +19,8 @@
|
|||
|
||||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.IOException;
|
||||
|
|
@ -42,9 +44,9 @@ public class PacketPlayOutPlayerAbilities extends PacketOut {
|
|||
}
|
||||
}
|
||||
|
||||
private PlayerAbilityFlags[] flags;
|
||||
private float flySpeed;
|
||||
private float fieldOfField;
|
||||
private final PlayerAbilityFlags[] flags;
|
||||
private final float flySpeed;
|
||||
private final float fieldOfField;
|
||||
|
||||
public PacketPlayOutPlayerAbilities(float flySpeed, float fieldOfField, PlayerAbilityFlags... flags) {
|
||||
this.flags = flags;
|
||||
|
|
@ -69,7 +71,7 @@ public class PacketPlayOutPlayerAbilities extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getPlayOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
byte value = 0;
|
||||
for (PlayerAbilityFlags flag : flags) {
|
||||
value = (byte) (value | flag.getValue());
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@
|
|||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayOutPlayerInfo.PlayerInfoData.PlayerInfoDataAddPlayer;
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
import com.loohp.limbo.utils.DataTypeIO;
|
||||
import com.loohp.limbo.utils.GameMode;
|
||||
|
||||
|
|
@ -42,9 +43,9 @@ public class PacketPlayOutPlayerInfo extends PacketOut {
|
|||
UPDATE_DISPLAY_NAME;
|
||||
}
|
||||
|
||||
private EnumSet<PlayerInfoAction> actions;
|
||||
private UUID uuid;
|
||||
private PlayerInfoData data;
|
||||
private final EnumSet<PlayerInfoAction> actions;
|
||||
private final UUID uuid;
|
||||
private final PlayerInfoData data;
|
||||
|
||||
public PacketPlayOutPlayerInfo(EnumSet<PlayerInfoAction> actions, UUID uuid, PlayerInfoData data) {
|
||||
this.actions = actions;
|
||||
|
|
@ -69,7 +70,7 @@ public class PacketPlayOutPlayerInfo extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getPlayOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
|
||||
DataTypeIO.writeEnumSet(output, actions, PlayerInfoAction.class);
|
||||
DataTypeIO.writeVarInt(output, 1);
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
import com.loohp.limbo.utils.DataTypeIO;
|
||||
import net.kyori.adventure.text.Component;
|
||||
|
||||
|
|
@ -28,8 +29,8 @@ import java.io.IOException;
|
|||
|
||||
public class PacketPlayOutPlayerListHeaderFooter extends PacketOut{
|
||||
|
||||
private Component header;
|
||||
private Component footer;
|
||||
private final Component header;
|
||||
private final Component footer;
|
||||
|
||||
public PacketPlayOutPlayerListHeaderFooter(Component header, Component footer) {
|
||||
this.header = header;
|
||||
|
|
@ -50,7 +51,7 @@ public class PacketPlayOutPlayerListHeaderFooter extends PacketOut{
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getPlayOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
DataTypeIO.writeComponent(output, header);
|
||||
DataTypeIO.writeComponent(output, footer);
|
||||
return buffer.toByteArray();
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
import com.loohp.limbo.utils.DataTypeIO;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
|
|
@ -28,8 +29,8 @@ import java.nio.charset.StandardCharsets;
|
|||
|
||||
public class PacketPlayOutPluginMessaging extends PacketOut {
|
||||
|
||||
private String channel;
|
||||
private byte[] data;
|
||||
private final String channel;
|
||||
private final byte[] data;
|
||||
|
||||
public PacketPlayOutPluginMessaging(String channel, byte[] data) {
|
||||
this.channel = channel;
|
||||
|
|
@ -49,7 +50,7 @@ public class PacketPlayOutPluginMessaging extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getPlayOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
DataTypeIO.writeString(output, channel, StandardCharsets.UTF_8);
|
||||
output.write(data);
|
||||
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
import com.loohp.limbo.utils.DataTypeIO;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
|
|
@ -48,13 +49,13 @@ public class PacketPlayOutPositionAndLook extends PacketOut {
|
|||
}
|
||||
}
|
||||
|
||||
private double x;
|
||||
private double y;
|
||||
private double z;
|
||||
private float yaw;
|
||||
private float pitch;
|
||||
private Set<PlayerTeleportFlags> flags;
|
||||
private int teleportId;
|
||||
private final double x;
|
||||
private final double y;
|
||||
private final double z;
|
||||
private final float yaw;
|
||||
private final float pitch;
|
||||
private final Set<PlayerTeleportFlags> flags;
|
||||
private final int teleportId;
|
||||
|
||||
public PacketPlayOutPositionAndLook(double x, double y, double z, float yaw, float pitch, int teleportId, PlayerTeleportFlags... flags) {
|
||||
this.x = x;
|
||||
|
|
@ -99,7 +100,7 @@ public class PacketPlayOutPositionAndLook extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getPlayOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
output.writeDouble(x);
|
||||
output.writeDouble(y);
|
||||
output.writeDouble(z);
|
||||
|
|
|
|||
|
|
@ -19,14 +19,13 @@
|
|||
|
||||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
import com.loohp.limbo.registry.RegistryCustom;
|
||||
import com.loohp.limbo.utils.DataTypeIO;
|
||||
import com.loohp.limbo.utils.GameMode;
|
||||
import com.loohp.limbo.world.Environment;
|
||||
import com.loohp.limbo.world.World;
|
||||
import net.kyori.adventure.key.Key;
|
||||
import net.querz.nbt.tag.CompoundTag;
|
||||
import net.querz.nbt.tag.ListTag;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.DataOutputStream;
|
||||
|
|
@ -35,13 +34,13 @@ import java.nio.charset.StandardCharsets;
|
|||
|
||||
public class PacketPlayOutRespawn extends PacketOut {
|
||||
|
||||
private Environment dimension;
|
||||
private World world;
|
||||
private long hashedSeed;
|
||||
private GameMode gamemode;
|
||||
private boolean isDebug;
|
||||
private boolean isFlat;
|
||||
private boolean copyMetaData;
|
||||
private final Environment dimension;
|
||||
private final World world;
|
||||
private final long hashedSeed;
|
||||
private final GameMode gamemode;
|
||||
private final boolean isDebug;
|
||||
private final boolean isFlat;
|
||||
private final boolean copyMetaData;
|
||||
|
||||
public PacketPlayOutRespawn(World world, long hashedSeed, GameMode gamemode, boolean isDebug, boolean isFlat, boolean copyMetaData) {
|
||||
this.dimension = world.getEnvironment();
|
||||
|
|
@ -86,7 +85,7 @@ public class PacketPlayOutRespawn extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getPlayOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
|
||||
DataTypeIO.writeVarInt(output, RegistryCustom.DIMENSION_TYPE.indexOf(world.getEnvironment().getKey()));
|
||||
DataTypeIO.writeString(output, Key.key(world.getName()).toString(), StandardCharsets.UTF_8);
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@
|
|||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.inventory.ItemStack;
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
import com.loohp.limbo.utils.DataTypeIO;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
|
|
@ -61,7 +62,7 @@ public class PacketPlayOutSetSlot extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getPlayOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
|
||||
output.writeByte(containerId);
|
||||
DataTypeIO.writeVarInt(output, stateId);
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@
|
|||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.entity.EntityType;
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
import com.loohp.limbo.utils.DataTypeIO;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
|
|
@ -29,19 +30,19 @@ import java.util.UUID;
|
|||
|
||||
public class PacketPlayOutSpawnEntity extends PacketOut {
|
||||
|
||||
private int entityId;
|
||||
private UUID uuid;
|
||||
private EntityType type;
|
||||
private double x;
|
||||
private double y;
|
||||
private double z;
|
||||
private float pitch;
|
||||
private float yaw;
|
||||
private float headYaw;
|
||||
private int data;
|
||||
private short velocityX;
|
||||
private short velocityY;
|
||||
private short velocityZ;
|
||||
private final int entityId;
|
||||
private final UUID uuid;
|
||||
private final EntityType type;
|
||||
private final double x;
|
||||
private final double y;
|
||||
private final double z;
|
||||
private final float pitch;
|
||||
private final float yaw;
|
||||
private final float headYaw;
|
||||
private final int data;
|
||||
private final short velocityX;
|
||||
private final short velocityY;
|
||||
private final short velocityZ;
|
||||
|
||||
public PacketPlayOutSpawnEntity(int entityId, UUID uuid, EntityType type, double x, double y, double z, float pitch, float yaw, float headYaw, int data, short velocityX, short velocityY, short velocityZ) {
|
||||
this.entityId = entityId;
|
||||
|
|
@ -116,7 +117,7 @@ public class PacketPlayOutSpawnEntity extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getPlayOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
DataTypeIO.writeVarInt(output, entityId);
|
||||
DataTypeIO.writeUUID(output, uuid);
|
||||
DataTypeIO.writeVarInt(output, type.getTypeId());
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
import com.loohp.limbo.utils.DataTypeIO;
|
||||
import com.loohp.limbo.world.BlockPosition;
|
||||
|
||||
|
|
@ -28,8 +29,8 @@ import java.io.IOException;
|
|||
|
||||
public class PacketPlayOutSpawnPosition extends PacketOut {
|
||||
|
||||
private BlockPosition position;
|
||||
private float angle;
|
||||
private final BlockPosition position;
|
||||
private final float angle;
|
||||
|
||||
public PacketPlayOutSpawnPosition(BlockPosition position, float angle) {
|
||||
this.position = position;
|
||||
|
|
@ -48,7 +49,7 @@ public class PacketPlayOutSpawnPosition extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getPlayOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
DataTypeIO.writeBlockPosition(output, position);
|
||||
output.writeFloat(angle);
|
||||
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
import com.loohp.limbo.utils.DataTypeIO;
|
||||
import net.kyori.adventure.key.Key;
|
||||
import net.kyori.adventure.sound.Sound;
|
||||
|
|
@ -30,8 +31,8 @@ import java.nio.charset.StandardCharsets;
|
|||
|
||||
public class PacketPlayOutStopSound extends PacketOut {
|
||||
|
||||
private Key sound;
|
||||
private Sound.Source source;
|
||||
private final Key sound;
|
||||
private final Sound.Source source;
|
||||
|
||||
public PacketPlayOutStopSound(Key sound, Sound.Source source) {
|
||||
this.sound = sound;
|
||||
|
|
@ -51,7 +52,7 @@ public class PacketPlayOutStopSound extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getPlayOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
|
||||
if (source != null) {
|
||||
if (sound != null) {
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
import com.loohp.limbo.utils.DataTypeIO;
|
||||
import net.kyori.adventure.text.Component;
|
||||
|
||||
|
|
@ -30,10 +31,10 @@ import java.util.Optional;
|
|||
|
||||
public class PacketPlayOutTabComplete extends PacketOut {
|
||||
|
||||
private int id;
|
||||
private int start;
|
||||
private int length;
|
||||
private TabCompleteMatches[] matches;
|
||||
private final int id;
|
||||
private final int start;
|
||||
private final int length;
|
||||
private final TabCompleteMatches[] matches;
|
||||
|
||||
public PacketPlayOutTabComplete(int id, int start, int length, TabCompleteMatches... matches) {
|
||||
this.id = id;
|
||||
|
|
@ -63,7 +64,7 @@ public class PacketPlayOutTabComplete extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getPlayOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
DataTypeIO.writeVarInt(output, id);
|
||||
DataTypeIO.writeVarInt(output, start);
|
||||
DataTypeIO.writeVarInt(output, length);
|
||||
|
|
|
|||
|
|
@ -19,14 +19,16 @@
|
|||
|
||||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
public class PacketPlayOutUnloadChunk extends PacketOut {
|
||||
|
||||
private int chunkX;
|
||||
private int chunkZ;
|
||||
private final int chunkX;
|
||||
private final int chunkZ;
|
||||
|
||||
public PacketPlayOutUnloadChunk(int chunkX, int chunkZ) {
|
||||
this.chunkX = chunkX;
|
||||
|
|
@ -46,7 +48,7 @@ public class PacketPlayOutUnloadChunk extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getPlayOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
output.writeInt(chunkX);
|
||||
output.writeInt(chunkZ);
|
||||
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
import com.loohp.limbo.utils.DataTypeIO;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
|
|
@ -27,8 +28,8 @@ import java.io.IOException;
|
|||
|
||||
public class PacketPlayOutUpdateViewPosition extends PacketOut {
|
||||
|
||||
private int chunkX;
|
||||
private int chunkZ;
|
||||
private final int chunkX;
|
||||
private final int chunkZ;
|
||||
|
||||
public PacketPlayOutUpdateViewPosition(int chunkX, int chunkZ) {
|
||||
this.chunkX = chunkX;
|
||||
|
|
@ -48,7 +49,7 @@ public class PacketPlayOutUpdateViewPosition extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getPlayOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
DataTypeIO.writeVarInt(output, chunkX);
|
||||
DataTypeIO.writeVarInt(output, chunkZ);
|
||||
|
||||
|
|
|
|||
|
|
@ -19,15 +19,17 @@
|
|||
|
||||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
public class PacketPlayOutWindowData extends PacketOut {
|
||||
|
||||
private int containerId;
|
||||
private int id;
|
||||
private int value;
|
||||
private final int containerId;
|
||||
private final int id;
|
||||
private final int value;
|
||||
|
||||
public PacketPlayOutWindowData(int containerId, int id, int value) {
|
||||
this.containerId = containerId;
|
||||
|
|
@ -52,7 +54,7 @@ public class PacketPlayOutWindowData extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getPlayOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
|
||||
output.writeByte(containerId);
|
||||
output.writeShort(id);
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@
|
|||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.inventory.ItemStack;
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
import com.loohp.limbo.utils.DataTypeIO;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
|
|
@ -29,10 +30,10 @@ import java.util.List;
|
|||
|
||||
public class PacketPlayOutWindowItems extends PacketOut {
|
||||
|
||||
private int containerId;
|
||||
private int stateId;
|
||||
private List<ItemStack> items;
|
||||
private ItemStack carriedItem;
|
||||
private final int containerId;
|
||||
private final int stateId;
|
||||
private final List<ItemStack> items;
|
||||
private final ItemStack carriedItem;
|
||||
|
||||
public PacketPlayOutWindowItems(int containerId, int stateId, List<ItemStack> items, ItemStack carriedItem) {
|
||||
this.containerId = containerId;
|
||||
|
|
@ -62,7 +63,7 @@ public class PacketPlayOutWindowItems extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getPlayOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
|
||||
output.writeByte(containerId);
|
||||
DataTypeIO.writeVarInt(output, stateId);
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ import java.io.IOException;
|
|||
|
||||
public class PacketStatusInPing extends PacketIn {
|
||||
|
||||
private long payload;
|
||||
private final long payload;
|
||||
|
||||
public PacketStatusInPing(long payload) {
|
||||
this.payload = payload;
|
||||
|
|
|
|||
|
|
@ -24,7 +24,6 @@ import java.io.DataInputStream;
|
|||
public class PacketStatusInRequest extends PacketIn {
|
||||
|
||||
public PacketStatusInRequest() {
|
||||
|
||||
}
|
||||
|
||||
public PacketStatusInRequest(DataInputStream in) {
|
||||
|
|
|
|||
|
|
@ -19,13 +19,15 @@
|
|||
|
||||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
public class PacketStatusOutPong extends PacketOut {
|
||||
|
||||
private long payload;
|
||||
private final long payload;
|
||||
|
||||
public PacketStatusOutPong(long payload) {
|
||||
this.payload = payload;
|
||||
|
|
@ -40,7 +42,7 @@ public class PacketStatusOutPong extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getStatusOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
output.writeLong(payload);
|
||||
|
||||
return buffer.toByteArray();
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
package com.loohp.limbo.network.protocol.packets;
|
||||
|
||||
import com.loohp.limbo.registry.PacketRegistry;
|
||||
import com.loohp.limbo.utils.DataTypeIO;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
|
|
@ -28,7 +29,7 @@ import java.nio.charset.StandardCharsets;
|
|||
|
||||
public class PacketStatusOutResponse extends PacketOut {
|
||||
|
||||
private String json;
|
||||
private final String json;
|
||||
|
||||
public PacketStatusOutResponse(String json) {
|
||||
this.json = json;
|
||||
|
|
@ -43,7 +44,7 @@ public class PacketStatusOutResponse extends PacketOut {
|
|||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
||||
DataOutputStream output = new DataOutputStream(buffer);
|
||||
output.writeByte(Packet.getStatusOut().get(getClass()));
|
||||
output.writeByte(PacketRegistry.getPacketId(getClass()));
|
||||
DataTypeIO.writeString(output, json, StandardCharsets.UTF_8);
|
||||
|
||||
return buffer.toByteArray();
|
||||
|
|
|
|||
|
|
@ -0,0 +1,349 @@
|
|||
/*
|
||||
* This file is part of Limbo.
|
||||
*
|
||||
* Copyright (C) 2024. LoohpJames <jamesloohp@gmail.com>
|
||||
* Copyright (C) 2024. Contributors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.loohp.limbo.registry;
|
||||
|
||||
import com.google.common.collect.BiMap;
|
||||
import com.google.common.collect.HashBiMap;
|
||||
import com.loohp.limbo.Limbo;
|
||||
import com.loohp.limbo.network.ClientConnection;
|
||||
import com.loohp.limbo.network.protocol.packets.ClientboundChunkBatchFinishedPacket;
|
||||
import com.loohp.limbo.network.protocol.packets.ClientboundChunkBatchStartPacket;
|
||||
import com.loohp.limbo.network.protocol.packets.ClientboundClearTitlesPacket;
|
||||
import com.loohp.limbo.network.protocol.packets.ClientboundFinishConfigurationPacket;
|
||||
import com.loohp.limbo.network.protocol.packets.ClientboundLevelChunkWithLightPacket;
|
||||
import com.loohp.limbo.network.protocol.packets.ClientboundRegistryDataPacket;
|
||||
import com.loohp.limbo.network.protocol.packets.ClientboundResourcePackPushPacket;
|
||||
import com.loohp.limbo.network.protocol.packets.ClientboundSetActionBarTextPacket;
|
||||
import com.loohp.limbo.network.protocol.packets.ClientboundSetSubtitleTextPacket;
|
||||
import com.loohp.limbo.network.protocol.packets.ClientboundSetTitleTextPacket;
|
||||
import com.loohp.limbo.network.protocol.packets.ClientboundSetTitlesAnimationPacket;
|
||||
import com.loohp.limbo.network.protocol.packets.ClientboundSystemChatPacket;
|
||||
import com.loohp.limbo.network.protocol.packets.Packet;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketHandshakingIn;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketLoginInLoginStart;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketLoginInPluginMessaging;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketLoginOutDisconnect;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketLoginOutLoginSuccess;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketLoginOutPluginMessaging;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayInBlockDig;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayInBlockPlace;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayInChat;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayInCloseWindow;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayInHeldItemChange;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayInItemName;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayInKeepAlive;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayInPickItem;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayInPluginMessaging;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayInPosition;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayInPositionAndLook;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayInRotation;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayInSetCreativeSlot;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayInTabComplete;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayInUseItem;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayInWindowClick;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayOutBoss;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayOutCloseWindow;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayOutDeclareCommands;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayOutDisconnect;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayOutEntityDestroy;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayOutEntityMetadata;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayOutGameStateChange;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayOutHeldItemChange;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayOutKeepAlive;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayOutLogin;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayOutNamedSoundEffect;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayOutOpenWindow;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayOutPlayerAbilities;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayOutPlayerInfo;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayOutPlayerListHeaderFooter;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayOutPluginMessaging;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayOutPositionAndLook;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayOutRespawn;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayOutSetSlot;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayOutSpawnEntity;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayOutSpawnPosition;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayOutStopSound;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayOutTabComplete;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayOutUnloadChunk;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayOutUpdateViewPosition;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayOutWindowData;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketPlayOutWindowItems;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketStatusInPing;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketStatusInRequest;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketStatusOutPong;
|
||||
import com.loohp.limbo.network.protocol.packets.PacketStatusOutResponse;
|
||||
import com.loohp.limbo.network.protocol.packets.ServerboundChatCommandPacket;
|
||||
import com.loohp.limbo.network.protocol.packets.ServerboundFinishConfigurationPacket;
|
||||
import com.loohp.limbo.network.protocol.packets.ServerboundLoginAcknowledgedPacket;
|
||||
import com.loohp.limbo.network.protocol.packets.ServerboundResourcePackPacket;
|
||||
import net.kyori.adventure.key.Key;
|
||||
import org.json.simple.JSONObject;
|
||||
import org.json.simple.parser.JSONParser;
|
||||
import org.json.simple.parser.ParseException;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
@SuppressWarnings("PatternValidation")
|
||||
public class PacketRegistry {
|
||||
|
||||
private static final Map<NetworkPhase, Map<PacketBound, BiMap<Key, Integer>>> ID_REGISTRY = new HashMap<>();
|
||||
private static final BiMap<Class<? extends Packet>, PacketClassInfo> CLASS_REGISTRY = HashBiMap.create();
|
||||
|
||||
static {
|
||||
String name = "reports/packets.json";
|
||||
|
||||
InputStream inputStream = Limbo.class.getClassLoader().getResourceAsStream(name);
|
||||
if (inputStream == null) {
|
||||
throw new RuntimeException("Failed to load " + name + " from jar!");
|
||||
}
|
||||
try (InputStreamReader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8)) {
|
||||
JSONObject json = (JSONObject) new JSONParser().parse(reader);
|
||||
for (Object objKey : json.keySet()) {
|
||||
String key = (String) objKey;
|
||||
NetworkPhase networkPhase = NetworkPhase.fromName(key);
|
||||
Map<PacketBound, BiMap<Key, Integer>> mappings = new HashMap<>();
|
||||
JSONObject jsonMappings = (JSONObject) json.get(key);
|
||||
for (Object objBoundKey : jsonMappings.keySet()) {
|
||||
String boundKey = (String) objBoundKey;
|
||||
PacketBound packetBound = PacketBound.fromName(boundKey);
|
||||
BiMap<Key, Integer> idMapping = HashBiMap.create();
|
||||
JSONObject jsonIds = (JSONObject) jsonMappings.get(boundKey);
|
||||
for (Object objPacketKey : jsonIds.keySet()) {
|
||||
String packetKey = (String) objPacketKey;
|
||||
idMapping.put(Key.key(packetKey), (int) (long) ((JSONObject) jsonIds.get(packetKey)).get("protocol_id"));
|
||||
}
|
||||
mappings.put(packetBound, idMapping);
|
||||
}
|
||||
ID_REGISTRY.put(networkPhase, mappings);
|
||||
}
|
||||
} catch (IOException | ParseException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
registerClass(PacketHandshakingIn.class, "minecraft:intention", NetworkPhase.HANDSHAKE, PacketBound.SERVERBOUND);
|
||||
|
||||
registerClass(PacketStatusInRequest.class, "minecraft:status_request", NetworkPhase.STATUS, PacketBound.SERVERBOUND);
|
||||
registerClass(PacketStatusInPing.class, "minecraft:ping_request", NetworkPhase.STATUS, PacketBound.SERVERBOUND);
|
||||
|
||||
registerClass(PacketStatusOutResponse.class, "minecraft:status_response", NetworkPhase.STATUS, PacketBound.CLIENTBOUND);
|
||||
registerClass(PacketStatusOutPong.class, "minecraft:pong_response", NetworkPhase.STATUS, PacketBound.CLIENTBOUND);
|
||||
|
||||
registerClass(PacketLoginInLoginStart.class, "minecraft:hello", NetworkPhase.LOGIN, PacketBound.SERVERBOUND);
|
||||
registerClass(PacketLoginInPluginMessaging.class, "minecraft:custom_query_answer", NetworkPhase.LOGIN, PacketBound.SERVERBOUND);
|
||||
registerClass(ServerboundLoginAcknowledgedPacket.class, "minecraft:login_acknowledged", NetworkPhase.LOGIN, PacketBound.SERVERBOUND);
|
||||
|
||||
registerClass(PacketLoginOutLoginSuccess.class, "minecraft:game_profile", NetworkPhase.LOGIN, PacketBound.CLIENTBOUND);
|
||||
registerClass(PacketLoginOutDisconnect.class, "minecraft:login_disconnect", NetworkPhase.LOGIN, PacketBound.CLIENTBOUND);
|
||||
registerClass(PacketLoginOutPluginMessaging.class, "minecraft:custom_query", NetworkPhase.LOGIN, PacketBound.CLIENTBOUND);
|
||||
|
||||
registerClass(ServerboundFinishConfigurationPacket.class, "minecraft:finish_configuration", NetworkPhase.CONFIGURATION, PacketBound.SERVERBOUND);
|
||||
|
||||
registerClass(ClientboundRegistryDataPacket.class, "minecraft:registry_data", NetworkPhase.CONFIGURATION, PacketBound.CLIENTBOUND);
|
||||
registerClass(ClientboundFinishConfigurationPacket.class, "minecraft:finish_configuration", NetworkPhase.CONFIGURATION, PacketBound.CLIENTBOUND);
|
||||
|
||||
registerClass(PacketPlayInKeepAlive.class, "minecraft:keep_alive", NetworkPhase.PLAY, PacketBound.SERVERBOUND);
|
||||
registerClass(ServerboundChatCommandPacket.class, "minecraft:chat_command", NetworkPhase.PLAY, PacketBound.SERVERBOUND);
|
||||
registerClass(PacketPlayInChat.class, "minecraft:chat", NetworkPhase.PLAY, PacketBound.SERVERBOUND);
|
||||
registerClass(PacketPlayInPosition.class, "minecraft:move_player_pos", NetworkPhase.PLAY, PacketBound.SERVERBOUND);
|
||||
registerClass(PacketPlayInPositionAndLook.class, "minecraft:move_player_pos_rot", NetworkPhase.PLAY, PacketBound.SERVERBOUND);
|
||||
registerClass(PacketPlayInRotation.class, "minecraft:move_player_rot", NetworkPhase.PLAY, PacketBound.SERVERBOUND);
|
||||
registerClass(PacketPlayInPluginMessaging.class, "minecraft:custom_payload", NetworkPhase.PLAY, PacketBound.SERVERBOUND);
|
||||
registerClass(PacketPlayInTabComplete.class, "minecraft:command_suggestion", NetworkPhase.PLAY, PacketBound.SERVERBOUND);
|
||||
registerClass(PacketPlayInHeldItemChange.class, "minecraft:set_carried_item", NetworkPhase.PLAY, PacketBound.SERVERBOUND);
|
||||
registerClass(ServerboundResourcePackPacket.class, "minecraft:resource_pack", NetworkPhase.PLAY, PacketBound.SERVERBOUND);
|
||||
registerClass(PacketPlayInUseItem.class, "minecraft:use_item_on", NetworkPhase.PLAY, PacketBound.SERVERBOUND);
|
||||
registerClass(PacketPlayInBlockPlace.class, "minecraft:use_item", NetworkPhase.PLAY, PacketBound.SERVERBOUND);
|
||||
registerClass(PacketPlayInSetCreativeSlot.class, "minecraft:set_creative_mode_slot", NetworkPhase.PLAY, PacketBound.SERVERBOUND);
|
||||
registerClass(PacketPlayInWindowClick.class, "minecraft:container_click", NetworkPhase.PLAY, PacketBound.SERVERBOUND);
|
||||
registerClass(PacketPlayInCloseWindow.class, "minecraft:container_close", NetworkPhase.PLAY, PacketBound.SERVERBOUND);
|
||||
registerClass(PacketPlayInPickItem.class, "minecraft:pick_item", NetworkPhase.PLAY, PacketBound.SERVERBOUND);
|
||||
registerClass(PacketPlayInBlockDig.class, "minecraft:player_action", NetworkPhase.PLAY, PacketBound.SERVERBOUND);
|
||||
registerClass(PacketPlayInItemName.class, "minecraft:rename_item", NetworkPhase.PLAY, PacketBound.SERVERBOUND);
|
||||
|
||||
registerClass(PacketPlayOutLogin.class, "minecraft:login", NetworkPhase.PLAY, PacketBound.CLIENTBOUND);
|
||||
registerClass(PacketPlayOutPositionAndLook.class, "minecraft:player_position", NetworkPhase.PLAY, PacketBound.CLIENTBOUND);
|
||||
registerClass(PacketPlayOutSpawnPosition.class, "minecraft:set_default_spawn_position", NetworkPhase.PLAY, PacketBound.CLIENTBOUND);
|
||||
registerClass(ClientboundSystemChatPacket.class, "minecraft:system_chat", NetworkPhase.PLAY, PacketBound.CLIENTBOUND);
|
||||
registerClass(PacketPlayOutPlayerAbilities.class, "minecraft:player_abilities", NetworkPhase.PLAY, PacketBound.CLIENTBOUND);
|
||||
registerClass(ClientboundLevelChunkWithLightPacket.class, "minecraft:level_chunk_with_light", NetworkPhase.PLAY, PacketBound.CLIENTBOUND);
|
||||
registerClass(PacketPlayOutUnloadChunk.class, "minecraft:forget_level_chunk", NetworkPhase.PLAY, PacketBound.CLIENTBOUND);
|
||||
registerClass(PacketPlayOutKeepAlive.class, "minecraft:keep_alive", NetworkPhase.PLAY, PacketBound.CLIENTBOUND);
|
||||
registerClass(PacketPlayOutGameStateChange.class, "minecraft:game_event", NetworkPhase.PLAY, PacketBound.CLIENTBOUND);
|
||||
registerClass(PacketPlayOutPlayerInfo.class, "minecraft:player_info_update", NetworkPhase.PLAY, PacketBound.CLIENTBOUND);
|
||||
registerClass(PacketPlayOutUpdateViewPosition.class, "minecraft:set_chunk_cache_center", NetworkPhase.PLAY, PacketBound.CLIENTBOUND);
|
||||
registerClass(PacketPlayOutDisconnect.class, "minecraft:disconnect", NetworkPhase.PLAY, PacketBound.CLIENTBOUND);
|
||||
registerClass(PacketPlayOutPluginMessaging.class, "minecraft:custom_payload", NetworkPhase.PLAY, PacketBound.CLIENTBOUND);
|
||||
registerClass(PacketPlayOutTabComplete.class, "minecraft:command_suggestions", NetworkPhase.PLAY, PacketBound.CLIENTBOUND);
|
||||
registerClass(PacketPlayOutDeclareCommands.class, "minecraft:commands", NetworkPhase.PLAY, PacketBound.CLIENTBOUND);
|
||||
registerClass(PacketPlayOutRespawn.class, "minecraft:respawn", NetworkPhase.PLAY, PacketBound.CLIENTBOUND);
|
||||
registerClass(PacketPlayOutEntityDestroy.class, "minecraft:remove_entities", NetworkPhase.PLAY, PacketBound.CLIENTBOUND);
|
||||
registerClass(PacketPlayOutEntityMetadata.class, "minecraft:set_entity_data", NetworkPhase.PLAY, PacketBound.CLIENTBOUND);
|
||||
registerClass(PacketPlayOutSpawnEntity.class, "minecraft:add_entity", NetworkPhase.PLAY, PacketBound.CLIENTBOUND);
|
||||
registerClass(PacketPlayOutHeldItemChange.class, "minecraft:set_carried_item", NetworkPhase.PLAY, PacketBound.CLIENTBOUND);
|
||||
registerClass(PacketPlayOutPlayerListHeaderFooter.class, "minecraft:tab_list", NetworkPhase.PLAY, PacketBound.CLIENTBOUND);
|
||||
registerClass(ClientboundResourcePackPushPacket.class, "minecraft:resource_pack_push", NetworkPhase.PLAY, PacketBound.CLIENTBOUND);
|
||||
registerClass(ClientboundSetTitlesAnimationPacket.class, "minecraft:set_titles_animation", NetworkPhase.PLAY, PacketBound.CLIENTBOUND);
|
||||
registerClass(ClientboundSetTitleTextPacket.class, "minecraft:set_title_text", NetworkPhase.PLAY, PacketBound.CLIENTBOUND);
|
||||
registerClass(ClientboundSetSubtitleTextPacket.class, "minecraft:set_subtitle_text", NetworkPhase.PLAY, PacketBound.CLIENTBOUND);
|
||||
registerClass(ClientboundSetActionBarTextPacket.class, "minecraft:set_action_bar_text", NetworkPhase.PLAY, PacketBound.CLIENTBOUND);
|
||||
registerClass(ClientboundClearTitlesPacket.class, "minecraft:clear_titles", NetworkPhase.PLAY, PacketBound.CLIENTBOUND);
|
||||
registerClass(PacketPlayOutBoss.class, "minecraft:boss_event", NetworkPhase.PLAY, PacketBound.CLIENTBOUND);
|
||||
registerClass(PacketPlayOutNamedSoundEffect.class, "minecraft:sound", NetworkPhase.PLAY, PacketBound.CLIENTBOUND);
|
||||
registerClass(PacketPlayOutStopSound.class, "minecraft:stop_sound", NetworkPhase.PLAY, PacketBound.CLIENTBOUND);
|
||||
registerClass(PacketPlayOutWindowItems.class, "minecraft:container_set_content", NetworkPhase.PLAY, PacketBound.CLIENTBOUND);
|
||||
registerClass(PacketPlayOutSetSlot.class, "minecraft:container_set_slot", NetworkPhase.PLAY, PacketBound.CLIENTBOUND);
|
||||
registerClass(PacketPlayOutOpenWindow.class, "minecraft:open_screen", NetworkPhase.PLAY, PacketBound.CLIENTBOUND);
|
||||
registerClass(PacketPlayOutCloseWindow.class, "minecraft:container_close", NetworkPhase.PLAY, PacketBound.CLIENTBOUND);
|
||||
registerClass(PacketPlayOutWindowData.class, "minecraft:container_set_data", NetworkPhase.PLAY, PacketBound.CLIENTBOUND);
|
||||
registerClass(ClientboundChunkBatchFinishedPacket.class, "minecraft:chunk_batch_finished", NetworkPhase.PLAY, PacketBound.CLIENTBOUND);
|
||||
registerClass(ClientboundChunkBatchStartPacket.class, "minecraft:chunk_batch_start", NetworkPhase.PLAY, PacketBound.CLIENTBOUND);
|
||||
}
|
||||
|
||||
private static void registerClass(Class<? extends Packet> packetClass, String key, NetworkPhase networkPhase, PacketBound packetBound) {
|
||||
CLASS_REGISTRY.put(packetClass, new PacketClassInfo(Key.key(key), networkPhase, packetBound));
|
||||
}
|
||||
|
||||
public static PacketClassInfo getPacketInfo(Class<? extends Packet> packetClass) {
|
||||
return CLASS_REGISTRY.get(packetClass);
|
||||
}
|
||||
|
||||
public static int getPacketId(Class<? extends Packet> packetClass) {
|
||||
PacketClassInfo info = getPacketInfo(packetClass);
|
||||
return ID_REGISTRY.get(info.getNetworkPhase()).get(info.getPacketBound()).get(info.getKey());
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static <T extends Packet> Class<? extends T> getPacketClass(int packetId, NetworkPhase networkPhase, PacketBound packetBound) {
|
||||
Key key = ID_REGISTRY.get(networkPhase).get(packetBound).inverse().get(packetId);
|
||||
return (Class<? extends T>) CLASS_REGISTRY.inverse().get(new PacketClassInfo(key, networkPhase, packetBound));
|
||||
}
|
||||
|
||||
public enum NetworkPhase {
|
||||
|
||||
HANDSHAKE("handshake", ClientConnection.ClientState.HANDSHAKE),
|
||||
STATUS("status", ClientConnection.ClientState.STATUS),
|
||||
CONFIGURATION("configuration", ClientConnection.ClientState.CONFIGURATION),
|
||||
LOGIN("login", ClientConnection.ClientState.LOGIN),
|
||||
PLAY("play", ClientConnection.ClientState.PLAY);
|
||||
|
||||
public static NetworkPhase fromName(String name) {
|
||||
for (NetworkPhase phase : values()) {
|
||||
if (phase.getName().equals(name)) {
|
||||
return phase;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static NetworkPhase fromClientState(ClientConnection.ClientState clientState) {
|
||||
for (NetworkPhase phase : values()) {
|
||||
if (phase.getClientState().equals(clientState)) {
|
||||
return phase;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private final String name;
|
||||
private final ClientConnection.ClientState clientState;
|
||||
|
||||
NetworkPhase(String name, ClientConnection.ClientState clientState) {
|
||||
this.name = name;
|
||||
this.clientState = clientState;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public ClientConnection.ClientState getClientState() {
|
||||
return clientState;
|
||||
}
|
||||
}
|
||||
|
||||
public enum PacketBound {
|
||||
|
||||
SERVERBOUND("serverbound"),
|
||||
CLIENTBOUND("clientbound");
|
||||
|
||||
public static PacketBound fromName(String name) {
|
||||
for (PacketBound bound : values()) {
|
||||
if (bound.getName().equals(name)) {
|
||||
return bound;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private final String name;
|
||||
|
||||
PacketBound(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
}
|
||||
|
||||
public static class PacketClassInfo {
|
||||
private final Key key;
|
||||
private final NetworkPhase networkPhase;
|
||||
private final PacketBound packetBound;
|
||||
|
||||
public PacketClassInfo(Key key, NetworkPhase networkPhase, PacketBound packetBound) {
|
||||
this.key = key;
|
||||
this.networkPhase = networkPhase;
|
||||
this.packetBound = packetBound;
|
||||
}
|
||||
|
||||
public Key getKey() {
|
||||
return key;
|
||||
}
|
||||
|
||||
public NetworkPhase getNetworkPhase() {
|
||||
return networkPhase;
|
||||
}
|
||||
|
||||
public PacketBound getPacketBound() {
|
||||
return packetBound;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
PacketClassInfo that = (PacketClassInfo) o;
|
||||
return Objects.equals(key, that.key) && networkPhase == that.networkPhase && packetBound == that.packetBound;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(key, networkPhase, packetBound);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -32,25 +32,47 @@ import java.io.IOException;
|
|||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class RegistryCustom {
|
||||
|
||||
public static final RegistryCustom WORLDGEN_BIOME = new RegistryCustom("worldgen/biome");
|
||||
public static final RegistryCustom CHAT_TYPE = new RegistryCustom("chat_type");
|
||||
public static final RegistryCustom TRIM_PATTERN = new RegistryCustom("trim_pattern");
|
||||
public static final RegistryCustom TRIM_MATERIAL = new RegistryCustom("trim_material");
|
||||
public static final RegistryCustom WOLF_VARIANT = new RegistryCustom("wolf_variant");
|
||||
public static final RegistryCustom DIMENSION_TYPE = new RegistryCustom("dimension_type");
|
||||
public static final RegistryCustom DAMAGE_TYPE = new RegistryCustom("damage_type");
|
||||
public static final RegistryCustom BANNER_PATTERN = new RegistryCustom("banner_pattern");
|
||||
private static final Map<Key, RegistryCustom> REGISTRIES = new HashMap<>();
|
||||
|
||||
public static final RegistryCustom ADVANCEMENT = register("advancement");
|
||||
public static final RegistryCustom BANNER_PATTERN = register("banner_pattern");
|
||||
public static final RegistryCustom CHAT_TYPE = register("chat_type");
|
||||
public static final RegistryCustom DAMAGE_TYPE = register("damage_type");
|
||||
public static final RegistryCustom DIMENSION_TYPE = register("dimension_type");
|
||||
public static final RegistryCustom ENCHANTMENT = register("enchantment");
|
||||
public static final RegistryCustom JUKEBOX_SONG = register("jukebox_song");
|
||||
public static final RegistryCustom PAINTING_VARIANT = register("painting_variant");
|
||||
public static final RegistryCustom TRIM_MATERIAL = register("trim_material");
|
||||
public static final RegistryCustom TRIM_PATTERN = register("trim_pattern");
|
||||
public static final RegistryCustom WOLF_VARIANT = register("wolf_variant");
|
||||
public static final RegistryCustom WORLDGEN_BIOME = register("worldgen/biome");
|
||||
|
||||
private static RegistryCustom register(String identifier) {
|
||||
RegistryCustom registryCustom = new RegistryCustom(identifier);
|
||||
REGISTRIES.put(registryCustom.getIdentifier(), registryCustom);
|
||||
return registryCustom;
|
||||
}
|
||||
|
||||
public static RegistryCustom getRegistry(Key identifier) {
|
||||
return REGISTRIES.get(identifier);
|
||||
}
|
||||
|
||||
public static Collection<RegistryCustom> getRegistries() {
|
||||
return REGISTRIES.values();
|
||||
}
|
||||
|
||||
private final Key identifier;
|
||||
private final Map<Key, CompoundTag> entries;
|
||||
|
||||
public RegistryCustom(Key identifier, Map<Key, CompoundTag> entries) {
|
||||
private RegistryCustom(Key identifier, Map<Key, CompoundTag> entries) {
|
||||
this.identifier = identifier;
|
||||
this.entries = entries;
|
||||
}
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,34 @@
|
|||
{
|
||||
"parent": "minecraft:adventure/ol_betsy",
|
||||
"criteria": {
|
||||
"arbalistic": {
|
||||
"conditions": {
|
||||
"unique_entity_types": 5
|
||||
},
|
||||
"trigger": "minecraft:killed_by_crossbow"
|
||||
}
|
||||
},
|
||||
"display": {
|
||||
"description": {
|
||||
"translate": "advancements.adventure.arbalistic.description"
|
||||
},
|
||||
"frame": "challenge",
|
||||
"hidden": true,
|
||||
"icon": {
|
||||
"count": 1,
|
||||
"id": "minecraft:crossbow"
|
||||
},
|
||||
"title": {
|
||||
"translate": "advancements.adventure.arbalistic.title"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"arbalistic"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"experience": 85
|
||||
},
|
||||
"sends_telemetry_event": true
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"parent": "minecraft:adventure/root",
|
||||
"criteria": {
|
||||
"avoid_vibration": {
|
||||
"trigger": "minecraft:avoid_vibration"
|
||||
}
|
||||
},
|
||||
"display": {
|
||||
"description": {
|
||||
"translate": "advancements.adventure.avoid_vibration.description"
|
||||
},
|
||||
"icon": {
|
||||
"count": 1,
|
||||
"id": "minecraft:sculk_sensor"
|
||||
},
|
||||
"title": {
|
||||
"translate": "advancements.adventure.avoid_vibration.title"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"avoid_vibration"
|
||||
]
|
||||
],
|
||||
"sends_telemetry_event": true
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
{
|
||||
"parent": "minecraft:adventure/minecraft_trials_edition",
|
||||
"criteria": {
|
||||
"blowback": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:breeze"
|
||||
}
|
||||
}
|
||||
],
|
||||
"killing_blow": {
|
||||
"direct_entity": {
|
||||
"type": "minecraft:breeze_wind_charge"
|
||||
},
|
||||
"tags": [
|
||||
{
|
||||
"expected": true,
|
||||
"id": "minecraft:is_projectile"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
}
|
||||
},
|
||||
"display": {
|
||||
"description": {
|
||||
"translate": "advancements.adventure.blowback.description"
|
||||
},
|
||||
"frame": "challenge",
|
||||
"icon": {
|
||||
"count": 1,
|
||||
"id": "minecraft:wind_charge"
|
||||
},
|
||||
"title": {
|
||||
"translate": "advancements.adventure.blowback.title"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"blowback"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"experience": 40
|
||||
},
|
||||
"sends_telemetry_event": true
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"parent": "minecraft:adventure/root",
|
||||
"criteria": {
|
||||
"brush_armadillo": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:armadillo"
|
||||
}
|
||||
}
|
||||
],
|
||||
"item": {
|
||||
"items": "minecraft:brush"
|
||||
}
|
||||
},
|
||||
"trigger": "minecraft:player_interacted_with_entity"
|
||||
}
|
||||
},
|
||||
"display": {
|
||||
"description": {
|
||||
"translate": "advancements.adventure.brush_armadillo.description"
|
||||
},
|
||||
"icon": {
|
||||
"count": 1,
|
||||
"id": "minecraft:armadillo_scute"
|
||||
},
|
||||
"title": {
|
||||
"translate": "advancements.adventure.brush_armadillo.title"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"brush_armadillo"
|
||||
]
|
||||
],
|
||||
"sends_telemetry_event": true
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
{
|
||||
"parent": "minecraft:adventure/shoot_arrow",
|
||||
"criteria": {
|
||||
"bullseye": {
|
||||
"conditions": {
|
||||
"projectile": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"distance": {
|
||||
"horizontal": {
|
||||
"min": 30.0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"signal_strength": 15
|
||||
},
|
||||
"trigger": "minecraft:target_hit"
|
||||
}
|
||||
},
|
||||
"display": {
|
||||
"description": {
|
||||
"translate": "advancements.adventure.bullseye.description"
|
||||
},
|
||||
"frame": "challenge",
|
||||
"icon": {
|
||||
"count": 1,
|
||||
"id": "minecraft:target"
|
||||
},
|
||||
"title": {
|
||||
"translate": "advancements.adventure.bullseye.title"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"bullseye"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"experience": 50
|
||||
},
|
||||
"sends_telemetry_event": true
|
||||
}
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
{
|
||||
"parent": "minecraft:adventure/salvage_sherd",
|
||||
"criteria": {
|
||||
"pot_crafted_using_only_sherds": {
|
||||
"conditions": {
|
||||
"ingredients": [
|
||||
{
|
||||
"items": "#minecraft:decorated_pot_sherds"
|
||||
},
|
||||
{
|
||||
"items": "#minecraft:decorated_pot_sherds"
|
||||
},
|
||||
{
|
||||
"items": "#minecraft:decorated_pot_sherds"
|
||||
},
|
||||
{
|
||||
"items": "#minecraft:decorated_pot_sherds"
|
||||
}
|
||||
],
|
||||
"recipe_id": "minecraft:decorated_pot"
|
||||
},
|
||||
"trigger": "minecraft:recipe_crafted"
|
||||
}
|
||||
},
|
||||
"display": {
|
||||
"description": {
|
||||
"translate": "advancements.adventure.craft_decorated_pot_using_only_sherds.description"
|
||||
},
|
||||
"icon": {
|
||||
"components": {
|
||||
"minecraft:pot_decorations": [
|
||||
"minecraft:brick",
|
||||
"minecraft:heart_pottery_sherd",
|
||||
"minecraft:brick",
|
||||
"minecraft:explorer_pottery_sherd"
|
||||
]
|
||||
},
|
||||
"count": 1,
|
||||
"id": "minecraft:decorated_pot"
|
||||
},
|
||||
"title": {
|
||||
"translate": "advancements.adventure.craft_decorated_pot_using_only_sherds.title"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"pot_crafted_using_only_sherds"
|
||||
]
|
||||
],
|
||||
"sends_telemetry_event": true
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
{
|
||||
"parent": "minecraft:adventure/root",
|
||||
"criteria": {
|
||||
"crafter_crafted_crafter": {
|
||||
"conditions": {
|
||||
"recipe_id": "minecraft:crafter"
|
||||
},
|
||||
"trigger": "minecraft:crafter_recipe_crafted"
|
||||
}
|
||||
},
|
||||
"display": {
|
||||
"description": {
|
||||
"translate": "advancements.adventure.crafters_crafting_crafters.description"
|
||||
},
|
||||
"icon": {
|
||||
"count": 1,
|
||||
"id": "minecraft:crafter"
|
||||
},
|
||||
"title": {
|
||||
"translate": "advancements.adventure.crafters_crafting_crafters.title"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"crafter_crafted_crafter"
|
||||
]
|
||||
],
|
||||
"sends_telemetry_event": true
|
||||
}
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
{
|
||||
"parent": "minecraft:adventure/root",
|
||||
"criteria": {
|
||||
"fall_from_world_height": {
|
||||
"conditions": {
|
||||
"distance": {
|
||||
"y": {
|
||||
"min": 379.0
|
||||
}
|
||||
},
|
||||
"player": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"location": {
|
||||
"position": {
|
||||
"y": {
|
||||
"max": -59.0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"start_position": {
|
||||
"position": {
|
||||
"y": {
|
||||
"min": 319.0
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"trigger": "minecraft:fall_from_height"
|
||||
}
|
||||
},
|
||||
"display": {
|
||||
"description": {
|
||||
"translate": "advancements.adventure.fall_from_world_height.description"
|
||||
},
|
||||
"icon": {
|
||||
"count": 1,
|
||||
"id": "minecraft:water_bucket"
|
||||
},
|
||||
"title": {
|
||||
"translate": "advancements.adventure.fall_from_world_height.title"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"fall_from_world_height"
|
||||
]
|
||||
],
|
||||
"sends_telemetry_event": true
|
||||
}
|
||||
|
|
@ -0,0 +1,69 @@
|
|||
{
|
||||
"parent": "minecraft:adventure/voluntary_exile",
|
||||
"criteria": {
|
||||
"hero_of_the_village": {
|
||||
"trigger": "minecraft:hero_of_the_village"
|
||||
}
|
||||
},
|
||||
"display": {
|
||||
"description": {
|
||||
"translate": "advancements.adventure.hero_of_the_village.description"
|
||||
},
|
||||
"frame": "challenge",
|
||||
"hidden": true,
|
||||
"icon": {
|
||||
"components": {
|
||||
"minecraft:banner_patterns": [
|
||||
{
|
||||
"color": "cyan",
|
||||
"pattern": "minecraft:rhombus"
|
||||
},
|
||||
{
|
||||
"color": "light_gray",
|
||||
"pattern": "minecraft:stripe_bottom"
|
||||
},
|
||||
{
|
||||
"color": "gray",
|
||||
"pattern": "minecraft:stripe_center"
|
||||
},
|
||||
{
|
||||
"color": "light_gray",
|
||||
"pattern": "minecraft:border"
|
||||
},
|
||||
{
|
||||
"color": "black",
|
||||
"pattern": "minecraft:stripe_middle"
|
||||
},
|
||||
{
|
||||
"color": "light_gray",
|
||||
"pattern": "minecraft:half_horizontal"
|
||||
},
|
||||
{
|
||||
"color": "light_gray",
|
||||
"pattern": "minecraft:circle"
|
||||
},
|
||||
{
|
||||
"color": "black",
|
||||
"pattern": "minecraft:border"
|
||||
}
|
||||
],
|
||||
"minecraft:hide_additional_tooltip": {},
|
||||
"minecraft:item_name": "{\"color\":\"gold\",\"translate\":\"block.minecraft.ominous_banner\"}"
|
||||
},
|
||||
"count": 1,
|
||||
"id": "minecraft:white_banner"
|
||||
},
|
||||
"title": {
|
||||
"translate": "advancements.adventure.hero_of_the_village.title"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"hero_of_the_village"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"experience": 100
|
||||
},
|
||||
"sends_telemetry_event": true
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
{
|
||||
"parent": "minecraft:adventure/root",
|
||||
"criteria": {
|
||||
"honey_block_slide": {
|
||||
"conditions": {
|
||||
"block": "minecraft:honey_block"
|
||||
},
|
||||
"trigger": "minecraft:slide_down_block"
|
||||
}
|
||||
},
|
||||
"display": {
|
||||
"description": {
|
||||
"translate": "advancements.adventure.honey_block_slide.description"
|
||||
},
|
||||
"icon": {
|
||||
"count": 1,
|
||||
"id": "minecraft:honey_block"
|
||||
},
|
||||
"title": {
|
||||
"translate": "advancements.adventure.honey_block_slide.title"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"honey_block_slide"
|
||||
]
|
||||
],
|
||||
"sends_telemetry_event": true
|
||||
}
|
||||
|
|
@ -0,0 +1,562 @@
|
|||
{
|
||||
"parent": "minecraft:adventure/root",
|
||||
"criteria": {
|
||||
"minecraft:blaze": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:blaze"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:bogged": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:bogged"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:breeze": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:breeze"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:cave_spider": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:cave_spider"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:creeper": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:creeper"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:drowned": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:drowned"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:elder_guardian": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:elder_guardian"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:ender_dragon": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:ender_dragon"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:enderman": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:enderman"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:endermite": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:endermite"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:evoker": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:evoker"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:ghast": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:ghast"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:guardian": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:guardian"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:hoglin": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:hoglin"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:husk": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:husk"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:magma_cube": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:magma_cube"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:phantom": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:phantom"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:piglin": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:piglin"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:piglin_brute": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:piglin_brute"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:pillager": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:pillager"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:ravager": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:ravager"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:shulker": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:shulker"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:silverfish": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:silverfish"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:skeleton": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:skeleton"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:slime": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:slime"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:spider": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:spider"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:stray": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:stray"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:vex": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:vex"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:vindicator": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:vindicator"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:witch": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:witch"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:wither": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:wither"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:wither_skeleton": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:wither_skeleton"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:zoglin": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:zoglin"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:zombie": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:zombie"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:zombie_villager": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:zombie_villager"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:zombified_piglin": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:zombified_piglin"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
}
|
||||
},
|
||||
"display": {
|
||||
"description": {
|
||||
"translate": "advancements.adventure.kill_a_mob.description"
|
||||
},
|
||||
"icon": {
|
||||
"count": 1,
|
||||
"id": "minecraft:iron_sword"
|
||||
},
|
||||
"title": {
|
||||
"translate": "advancements.adventure.kill_a_mob.title"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"minecraft:blaze",
|
||||
"minecraft:bogged",
|
||||
"minecraft:breeze",
|
||||
"minecraft:cave_spider",
|
||||
"minecraft:creeper",
|
||||
"minecraft:drowned",
|
||||
"minecraft:elder_guardian",
|
||||
"minecraft:ender_dragon",
|
||||
"minecraft:enderman",
|
||||
"minecraft:endermite",
|
||||
"minecraft:evoker",
|
||||
"minecraft:ghast",
|
||||
"minecraft:guardian",
|
||||
"minecraft:hoglin",
|
||||
"minecraft:husk",
|
||||
"minecraft:magma_cube",
|
||||
"minecraft:phantom",
|
||||
"minecraft:piglin",
|
||||
"minecraft:piglin_brute",
|
||||
"minecraft:pillager",
|
||||
"minecraft:ravager",
|
||||
"minecraft:shulker",
|
||||
"minecraft:silverfish",
|
||||
"minecraft:skeleton",
|
||||
"minecraft:slime",
|
||||
"minecraft:spider",
|
||||
"minecraft:stray",
|
||||
"minecraft:vex",
|
||||
"minecraft:vindicator",
|
||||
"minecraft:witch",
|
||||
"minecraft:wither_skeleton",
|
||||
"minecraft:wither",
|
||||
"minecraft:zoglin",
|
||||
"minecraft:zombie_villager",
|
||||
"minecraft:zombie",
|
||||
"minecraft:zombified_piglin"
|
||||
]
|
||||
],
|
||||
"sends_telemetry_event": true
|
||||
}
|
||||
|
|
@ -0,0 +1,636 @@
|
|||
{
|
||||
"parent": "minecraft:adventure/kill_a_mob",
|
||||
"criteria": {
|
||||
"minecraft:blaze": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:blaze"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:bogged": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:bogged"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:breeze": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:breeze"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:cave_spider": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:cave_spider"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:creeper": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:creeper"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:drowned": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:drowned"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:elder_guardian": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:elder_guardian"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:ender_dragon": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:ender_dragon"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:enderman": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:enderman"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:endermite": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:endermite"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:evoker": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:evoker"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:ghast": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:ghast"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:guardian": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:guardian"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:hoglin": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:hoglin"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:husk": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:husk"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:magma_cube": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:magma_cube"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:phantom": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:phantom"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:piglin": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:piglin"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:piglin_brute": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:piglin_brute"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:pillager": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:pillager"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:ravager": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:ravager"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:shulker": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:shulker"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:silverfish": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:silverfish"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:skeleton": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:skeleton"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:slime": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:slime"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:spider": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:spider"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:stray": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:stray"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:vex": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:vex"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:vindicator": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:vindicator"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:witch": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:witch"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:wither": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:wither"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:wither_skeleton": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:wither_skeleton"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:zoglin": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:zoglin"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:zombie": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:zombie"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:zombie_villager": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:zombie_villager"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
},
|
||||
"minecraft:zombified_piglin": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:zombified_piglin"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
}
|
||||
},
|
||||
"display": {
|
||||
"description": {
|
||||
"translate": "advancements.adventure.kill_all_mobs.description"
|
||||
},
|
||||
"frame": "challenge",
|
||||
"icon": {
|
||||
"count": 1,
|
||||
"id": "minecraft:diamond_sword"
|
||||
},
|
||||
"title": {
|
||||
"translate": "advancements.adventure.kill_all_mobs.title"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"minecraft:blaze"
|
||||
],
|
||||
[
|
||||
"minecraft:bogged"
|
||||
],
|
||||
[
|
||||
"minecraft:breeze"
|
||||
],
|
||||
[
|
||||
"minecraft:cave_spider"
|
||||
],
|
||||
[
|
||||
"minecraft:creeper"
|
||||
],
|
||||
[
|
||||
"minecraft:drowned"
|
||||
],
|
||||
[
|
||||
"minecraft:elder_guardian"
|
||||
],
|
||||
[
|
||||
"minecraft:ender_dragon"
|
||||
],
|
||||
[
|
||||
"minecraft:enderman"
|
||||
],
|
||||
[
|
||||
"minecraft:endermite"
|
||||
],
|
||||
[
|
||||
"minecraft:evoker"
|
||||
],
|
||||
[
|
||||
"minecraft:ghast"
|
||||
],
|
||||
[
|
||||
"minecraft:guardian"
|
||||
],
|
||||
[
|
||||
"minecraft:hoglin"
|
||||
],
|
||||
[
|
||||
"minecraft:husk"
|
||||
],
|
||||
[
|
||||
"minecraft:magma_cube"
|
||||
],
|
||||
[
|
||||
"minecraft:phantom"
|
||||
],
|
||||
[
|
||||
"minecraft:piglin"
|
||||
],
|
||||
[
|
||||
"minecraft:piglin_brute"
|
||||
],
|
||||
[
|
||||
"minecraft:pillager"
|
||||
],
|
||||
[
|
||||
"minecraft:ravager"
|
||||
],
|
||||
[
|
||||
"minecraft:shulker"
|
||||
],
|
||||
[
|
||||
"minecraft:silverfish"
|
||||
],
|
||||
[
|
||||
"minecraft:skeleton"
|
||||
],
|
||||
[
|
||||
"minecraft:slime"
|
||||
],
|
||||
[
|
||||
"minecraft:spider"
|
||||
],
|
||||
[
|
||||
"minecraft:stray"
|
||||
],
|
||||
[
|
||||
"minecraft:vex"
|
||||
],
|
||||
[
|
||||
"minecraft:vindicator"
|
||||
],
|
||||
[
|
||||
"minecraft:witch"
|
||||
],
|
||||
[
|
||||
"minecraft:wither_skeleton"
|
||||
],
|
||||
[
|
||||
"minecraft:wither"
|
||||
],
|
||||
[
|
||||
"minecraft:zoglin"
|
||||
],
|
||||
[
|
||||
"minecraft:zombie_villager"
|
||||
],
|
||||
[
|
||||
"minecraft:zombie"
|
||||
],
|
||||
[
|
||||
"minecraft:zombified_piglin"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"experience": 100
|
||||
},
|
||||
"sends_telemetry_event": true
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
{
|
||||
"parent": "minecraft:adventure/kill_a_mob",
|
||||
"criteria": {
|
||||
"kill_mob_near_sculk_catalyst": {
|
||||
"trigger": "minecraft:kill_mob_near_sculk_catalyst"
|
||||
}
|
||||
},
|
||||
"display": {
|
||||
"description": {
|
||||
"translate": "advancements.adventure.kill_mob_near_sculk_catalyst.description"
|
||||
},
|
||||
"frame": "challenge",
|
||||
"icon": {
|
||||
"count": 1,
|
||||
"id": "minecraft:sculk_catalyst"
|
||||
},
|
||||
"title": {
|
||||
"translate": "advancements.adventure.kill_mob_near_sculk_catalyst.title"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"kill_mob_near_sculk_catalyst"
|
||||
]
|
||||
],
|
||||
"sends_telemetry_event": true
|
||||
}
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
{
|
||||
"parent": "minecraft:adventure/minecraft_trials_edition",
|
||||
"criteria": {
|
||||
"lighten_up": {
|
||||
"conditions": {
|
||||
"location": [
|
||||
{
|
||||
"condition": "minecraft:location_check",
|
||||
"predicate": {
|
||||
"block": {
|
||||
"blocks": [
|
||||
"minecraft:oxidized_copper_bulb",
|
||||
"minecraft:weathered_copper_bulb",
|
||||
"minecraft:exposed_copper_bulb",
|
||||
"minecraft:waxed_oxidized_copper_bulb",
|
||||
"minecraft:waxed_weathered_copper_bulb",
|
||||
"minecraft:waxed_exposed_copper_bulb"
|
||||
],
|
||||
"state": {
|
||||
"lit": "true"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"condition": "minecraft:match_tool",
|
||||
"predicate": {
|
||||
"items": [
|
||||
"minecraft:wooden_axe",
|
||||
"minecraft:golden_axe",
|
||||
"minecraft:stone_axe",
|
||||
"minecraft:iron_axe",
|
||||
"minecraft:diamond_axe",
|
||||
"minecraft:netherite_axe"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:item_used_on_block"
|
||||
}
|
||||
},
|
||||
"display": {
|
||||
"description": {
|
||||
"translate": "advancements.adventure.lighten_up.description"
|
||||
},
|
||||
"icon": {
|
||||
"count": 1,
|
||||
"id": "minecraft:copper_bulb"
|
||||
},
|
||||
"title": {
|
||||
"translate": "advancements.adventure.lighten_up.title"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"lighten_up"
|
||||
]
|
||||
],
|
||||
"sends_telemetry_event": true
|
||||
}
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
{
|
||||
"parent": "minecraft:adventure/root",
|
||||
"criteria": {
|
||||
"lightning_rod_with_villager_no_fire": {
|
||||
"conditions": {
|
||||
"bystander": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:villager"
|
||||
}
|
||||
}
|
||||
],
|
||||
"lightning": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"distance": {
|
||||
"absolute": {
|
||||
"max": 30.0
|
||||
}
|
||||
},
|
||||
"type_specific": {
|
||||
"type": "minecraft:lightning",
|
||||
"blocks_set_on_fire": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:lightning_strike"
|
||||
}
|
||||
},
|
||||
"display": {
|
||||
"description": {
|
||||
"translate": "advancements.adventure.lightning_rod_with_villager_no_fire.description"
|
||||
},
|
||||
"icon": {
|
||||
"count": 1,
|
||||
"id": "minecraft:lightning_rod"
|
||||
},
|
||||
"title": {
|
||||
"translate": "advancements.adventure.lightning_rod_with_villager_no_fire.title"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"lightning_rod_with_villager_no_fire"
|
||||
]
|
||||
],
|
||||
"sends_telemetry_event": true
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
{
|
||||
"parent": "minecraft:adventure/root",
|
||||
"criteria": {
|
||||
"minecraft_trials_edition": {
|
||||
"conditions": {
|
||||
"player": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"location": {
|
||||
"structures": "minecraft:trial_chambers"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:location"
|
||||
}
|
||||
},
|
||||
"display": {
|
||||
"description": {
|
||||
"translate": "advancements.adventure.minecraft_trials_edition.description"
|
||||
},
|
||||
"icon": {
|
||||
"count": 1,
|
||||
"id": "minecraft:chiseled_tuff"
|
||||
},
|
||||
"title": {
|
||||
"translate": "advancements.adventure.minecraft_trials_edition.title"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"minecraft_trials_edition"
|
||||
]
|
||||
],
|
||||
"sends_telemetry_event": true
|
||||
}
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
"parent": "minecraft:adventure/root",
|
||||
"criteria": {
|
||||
"shot_crossbow": {
|
||||
"conditions": {
|
||||
"item": {
|
||||
"items": "minecraft:crossbow"
|
||||
}
|
||||
},
|
||||
"trigger": "minecraft:shot_crossbow"
|
||||
}
|
||||
},
|
||||
"display": {
|
||||
"description": {
|
||||
"translate": "advancements.adventure.ol_betsy.description"
|
||||
},
|
||||
"icon": {
|
||||
"count": 1,
|
||||
"id": "minecraft:crossbow"
|
||||
},
|
||||
"title": {
|
||||
"translate": "advancements.adventure.ol_betsy.title"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"shot_crossbow"
|
||||
]
|
||||
],
|
||||
"sends_telemetry_event": true
|
||||
}
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
{
|
||||
"parent": "minecraft:adventure/minecraft_trials_edition",
|
||||
"criteria": {
|
||||
"overoverkill": {
|
||||
"conditions": {
|
||||
"damage": {
|
||||
"type": {
|
||||
"direct_entity": {
|
||||
"type": "minecraft:player",
|
||||
"equipment": {
|
||||
"mainhand": {
|
||||
"items": "minecraft:mace"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": [
|
||||
{
|
||||
"expected": true,
|
||||
"id": "minecraft:is_player_attack"
|
||||
}
|
||||
]
|
||||
},
|
||||
"dealt": {
|
||||
"min": 100.0
|
||||
}
|
||||
}
|
||||
},
|
||||
"trigger": "minecraft:player_hurt_entity"
|
||||
}
|
||||
},
|
||||
"display": {
|
||||
"description": {
|
||||
"translate": "advancements.adventure.overoverkill.description"
|
||||
},
|
||||
"frame": "challenge",
|
||||
"icon": {
|
||||
"count": 1,
|
||||
"id": "minecraft:mace"
|
||||
},
|
||||
"title": {
|
||||
"translate": "advancements.adventure.overoverkill.title"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"overoverkill"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"experience": 50
|
||||
},
|
||||
"sends_telemetry_event": true
|
||||
}
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
{
|
||||
"parent": "minecraft:adventure/sleep_in_bed",
|
||||
"criteria": {
|
||||
"play_jukebox_in_meadows": {
|
||||
"conditions": {
|
||||
"location": [
|
||||
{
|
||||
"condition": "minecraft:location_check",
|
||||
"predicate": {
|
||||
"biomes": "minecraft:meadow",
|
||||
"block": {
|
||||
"blocks": "minecraft:jukebox"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"condition": "minecraft:match_tool",
|
||||
"predicate": {
|
||||
"predicates": {
|
||||
"minecraft:jukebox_playable": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:item_used_on_block"
|
||||
}
|
||||
},
|
||||
"display": {
|
||||
"description": {
|
||||
"translate": "advancements.adventure.play_jukebox_in_meadows.description"
|
||||
},
|
||||
"icon": {
|
||||
"count": 1,
|
||||
"id": "minecraft:jukebox"
|
||||
},
|
||||
"title": {
|
||||
"translate": "advancements.adventure.play_jukebox_in_meadows.title"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"play_jukebox_in_meadows"
|
||||
]
|
||||
],
|
||||
"sends_telemetry_event": true
|
||||
}
|
||||
|
|
@ -0,0 +1,184 @@
|
|||
{
|
||||
"parent": "minecraft:adventure/root",
|
||||
"criteria": {
|
||||
"chiseled_bookshelf": {
|
||||
"conditions": {
|
||||
"location": [
|
||||
{
|
||||
"block": "minecraft:chiseled_bookshelf",
|
||||
"condition": "minecraft:block_state_property"
|
||||
},
|
||||
{
|
||||
"condition": "minecraft:any_of",
|
||||
"terms": [
|
||||
{
|
||||
"condition": "minecraft:location_check",
|
||||
"offsetZ": 1,
|
||||
"predicate": {
|
||||
"block": {
|
||||
"blocks": "minecraft:comparator",
|
||||
"state": {
|
||||
"facing": "north"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"condition": "minecraft:location_check",
|
||||
"offsetZ": -1,
|
||||
"predicate": {
|
||||
"block": {
|
||||
"blocks": "minecraft:comparator",
|
||||
"state": {
|
||||
"facing": "south"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"condition": "minecraft:location_check",
|
||||
"offsetX": 1,
|
||||
"predicate": {
|
||||
"block": {
|
||||
"blocks": "minecraft:comparator",
|
||||
"state": {
|
||||
"facing": "west"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"condition": "minecraft:location_check",
|
||||
"offsetX": -1,
|
||||
"predicate": {
|
||||
"block": {
|
||||
"blocks": "minecraft:comparator",
|
||||
"state": {
|
||||
"facing": "east"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:placed_block"
|
||||
},
|
||||
"comparator": {
|
||||
"conditions": {
|
||||
"location": [
|
||||
{
|
||||
"condition": "minecraft:any_of",
|
||||
"terms": [
|
||||
{
|
||||
"condition": "minecraft:all_of",
|
||||
"terms": [
|
||||
{
|
||||
"block": "minecraft:comparator",
|
||||
"condition": "minecraft:block_state_property",
|
||||
"properties": {
|
||||
"facing": "north"
|
||||
}
|
||||
},
|
||||
{
|
||||
"condition": "minecraft:location_check",
|
||||
"offsetZ": -1,
|
||||
"predicate": {
|
||||
"block": {
|
||||
"blocks": "minecraft:chiseled_bookshelf"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"condition": "minecraft:all_of",
|
||||
"terms": [
|
||||
{
|
||||
"block": "minecraft:comparator",
|
||||
"condition": "minecraft:block_state_property",
|
||||
"properties": {
|
||||
"facing": "south"
|
||||
}
|
||||
},
|
||||
{
|
||||
"condition": "minecraft:location_check",
|
||||
"offsetZ": 1,
|
||||
"predicate": {
|
||||
"block": {
|
||||
"blocks": "minecraft:chiseled_bookshelf"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"condition": "minecraft:all_of",
|
||||
"terms": [
|
||||
{
|
||||
"block": "minecraft:comparator",
|
||||
"condition": "minecraft:block_state_property",
|
||||
"properties": {
|
||||
"facing": "west"
|
||||
}
|
||||
},
|
||||
{
|
||||
"condition": "minecraft:location_check",
|
||||
"offsetX": -1,
|
||||
"predicate": {
|
||||
"block": {
|
||||
"blocks": "minecraft:chiseled_bookshelf"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"condition": "minecraft:all_of",
|
||||
"terms": [
|
||||
{
|
||||
"block": "minecraft:comparator",
|
||||
"condition": "minecraft:block_state_property",
|
||||
"properties": {
|
||||
"facing": "east"
|
||||
}
|
||||
},
|
||||
{
|
||||
"condition": "minecraft:location_check",
|
||||
"offsetX": 1,
|
||||
"predicate": {
|
||||
"block": {
|
||||
"blocks": "minecraft:chiseled_bookshelf"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:placed_block"
|
||||
}
|
||||
},
|
||||
"display": {
|
||||
"description": {
|
||||
"translate": "advancements.adventure.read_power_from_chiseled_bookshelf.description"
|
||||
},
|
||||
"icon": {
|
||||
"count": 1,
|
||||
"id": "minecraft:chiseled_bookshelf"
|
||||
},
|
||||
"title": {
|
||||
"translate": "advancements.adventure.read_power_from_chiseled_bookshelf.title"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"chiseled_bookshelf",
|
||||
"comparator"
|
||||
]
|
||||
],
|
||||
"sends_telemetry_event": true
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
{
|
||||
"parent": "minecraft:adventure/under_lock_and_key",
|
||||
"criteria": {
|
||||
"revaulting": {
|
||||
"conditions": {
|
||||
"location": [
|
||||
{
|
||||
"condition": "minecraft:location_check",
|
||||
"predicate": {
|
||||
"block": {
|
||||
"blocks": "minecraft:vault",
|
||||
"state": {
|
||||
"ominous": "true"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"condition": "minecraft:match_tool",
|
||||
"predicate": {
|
||||
"items": "minecraft:ominous_trial_key"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:item_used_on_block"
|
||||
}
|
||||
},
|
||||
"display": {
|
||||
"description": {
|
||||
"translate": "advancements.adventure.revaulting.description"
|
||||
},
|
||||
"frame": "goal",
|
||||
"icon": {
|
||||
"count": 1,
|
||||
"id": "minecraft:ominous_trial_key"
|
||||
},
|
||||
"title": {
|
||||
"translate": "advancements.adventure.revaulting.title"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"revaulting"
|
||||
]
|
||||
],
|
||||
"sends_telemetry_event": true
|
||||
}
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
{
|
||||
"criteria": {
|
||||
"killed_by_something": {
|
||||
"trigger": "minecraft:entity_killed_player"
|
||||
},
|
||||
"killed_something": {
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
}
|
||||
},
|
||||
"display": {
|
||||
"announce_to_chat": false,
|
||||
"background": "minecraft:textures/gui/advancements/backgrounds/adventure.png",
|
||||
"description": {
|
||||
"translate": "advancements.adventure.root.description"
|
||||
},
|
||||
"icon": {
|
||||
"count": 1,
|
||||
"id": "minecraft:map"
|
||||
},
|
||||
"show_toast": false,
|
||||
"title": {
|
||||
"translate": "advancements.adventure.root.title"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"killed_something",
|
||||
"killed_by_something"
|
||||
]
|
||||
],
|
||||
"sends_telemetry_event": true
|
||||
}
|
||||
|
|
@ -0,0 +1,77 @@
|
|||
{
|
||||
"parent": "minecraft:adventure/root",
|
||||
"criteria": {
|
||||
"desert_pyramid": {
|
||||
"conditions": {
|
||||
"loot_table": "minecraft:archaeology/desert_pyramid"
|
||||
},
|
||||
"trigger": "minecraft:player_generates_container_loot"
|
||||
},
|
||||
"desert_well": {
|
||||
"conditions": {
|
||||
"loot_table": "minecraft:archaeology/desert_well"
|
||||
},
|
||||
"trigger": "minecraft:player_generates_container_loot"
|
||||
},
|
||||
"has_sherd": {
|
||||
"conditions": {
|
||||
"items": [
|
||||
{
|
||||
"items": "#minecraft:decorated_pot_sherds"
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:inventory_changed"
|
||||
},
|
||||
"ocean_ruin_cold": {
|
||||
"conditions": {
|
||||
"loot_table": "minecraft:archaeology/ocean_ruin_cold"
|
||||
},
|
||||
"trigger": "minecraft:player_generates_container_loot"
|
||||
},
|
||||
"ocean_ruin_warm": {
|
||||
"conditions": {
|
||||
"loot_table": "minecraft:archaeology/ocean_ruin_warm"
|
||||
},
|
||||
"trigger": "minecraft:player_generates_container_loot"
|
||||
},
|
||||
"trail_ruins_common": {
|
||||
"conditions": {
|
||||
"loot_table": "minecraft:archaeology/trail_ruins_common"
|
||||
},
|
||||
"trigger": "minecraft:player_generates_container_loot"
|
||||
},
|
||||
"trail_ruins_rare": {
|
||||
"conditions": {
|
||||
"loot_table": "minecraft:archaeology/trail_ruins_rare"
|
||||
},
|
||||
"trigger": "minecraft:player_generates_container_loot"
|
||||
}
|
||||
},
|
||||
"display": {
|
||||
"description": {
|
||||
"translate": "advancements.adventure.salvage_sherd.description"
|
||||
},
|
||||
"icon": {
|
||||
"count": 1,
|
||||
"id": "minecraft:brush"
|
||||
},
|
||||
"title": {
|
||||
"translate": "advancements.adventure.salvage_sherd.title"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"desert_pyramid",
|
||||
"desert_well",
|
||||
"ocean_ruin_cold",
|
||||
"ocean_ruin_warm",
|
||||
"trail_ruins_rare",
|
||||
"trail_ruins_common"
|
||||
],
|
||||
[
|
||||
"has_sherd"
|
||||
]
|
||||
],
|
||||
"sends_telemetry_event": true
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"parent": "minecraft:adventure/kill_a_mob",
|
||||
"criteria": {
|
||||
"shot_arrow": {
|
||||
"conditions": {
|
||||
"damage": {
|
||||
"type": {
|
||||
"direct_entity": {
|
||||
"type": "#minecraft:arrows"
|
||||
},
|
||||
"tags": [
|
||||
{
|
||||
"expected": true,
|
||||
"id": "minecraft:is_projectile"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"trigger": "minecraft:player_hurt_entity"
|
||||
}
|
||||
},
|
||||
"display": {
|
||||
"description": {
|
||||
"translate": "advancements.adventure.shoot_arrow.description"
|
||||
},
|
||||
"icon": {
|
||||
"count": 1,
|
||||
"id": "minecraft:bow"
|
||||
},
|
||||
"title": {
|
||||
"translate": "advancements.adventure.shoot_arrow.title"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"shot_arrow"
|
||||
]
|
||||
],
|
||||
"sends_telemetry_event": true
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"parent": "minecraft:adventure/root",
|
||||
"criteria": {
|
||||
"slept_in_bed": {
|
||||
"trigger": "minecraft:slept_in_bed"
|
||||
}
|
||||
},
|
||||
"display": {
|
||||
"description": {
|
||||
"translate": "advancements.adventure.sleep_in_bed.description"
|
||||
},
|
||||
"icon": {
|
||||
"count": 1,
|
||||
"id": "minecraft:red_bed"
|
||||
},
|
||||
"title": {
|
||||
"translate": "advancements.adventure.sleep_in_bed.title"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"slept_in_bed"
|
||||
]
|
||||
],
|
||||
"sends_telemetry_event": true
|
||||
}
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
{
|
||||
"parent": "minecraft:adventure/shoot_arrow",
|
||||
"criteria": {
|
||||
"killed_skeleton": {
|
||||
"conditions": {
|
||||
"entity": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type": "minecraft:skeleton",
|
||||
"distance": {
|
||||
"horizontal": {
|
||||
"min": 50.0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"killing_blow": {
|
||||
"tags": [
|
||||
{
|
||||
"expected": true,
|
||||
"id": "minecraft:is_projectile"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"trigger": "minecraft:player_killed_entity"
|
||||
}
|
||||
},
|
||||
"display": {
|
||||
"description": {
|
||||
"translate": "advancements.adventure.sniper_duel.description"
|
||||
},
|
||||
"frame": "challenge",
|
||||
"icon": {
|
||||
"count": 1,
|
||||
"id": "minecraft:arrow"
|
||||
},
|
||||
"title": {
|
||||
"translate": "advancements.adventure.sniper_duel.title"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"killed_skeleton"
|
||||
]
|
||||
],
|
||||
"rewards": {
|
||||
"experience": 50
|
||||
},
|
||||
"sends_telemetry_event": true
|
||||
}
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
{
|
||||
"parent": "minecraft:adventure/spyglass_at_ghast",
|
||||
"criteria": {
|
||||
"spyglass_at_dragon": {
|
||||
"conditions": {
|
||||
"item": {
|
||||
"items": "minecraft:spyglass"
|
||||
},
|
||||
"player": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type_specific": {
|
||||
"type": "minecraft:player",
|
||||
"looking_at": {
|
||||
"type": "minecraft:ender_dragon"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:using_item"
|
||||
}
|
||||
},
|
||||
"display": {
|
||||
"description": {
|
||||
"translate": "advancements.adventure.spyglass_at_dragon.description"
|
||||
},
|
||||
"icon": {
|
||||
"count": 1,
|
||||
"id": "minecraft:spyglass"
|
||||
},
|
||||
"title": {
|
||||
"translate": "advancements.adventure.spyglass_at_dragon.title"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"spyglass_at_dragon"
|
||||
]
|
||||
],
|
||||
"sends_telemetry_event": true
|
||||
}
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
{
|
||||
"parent": "minecraft:adventure/spyglass_at_parrot",
|
||||
"criteria": {
|
||||
"spyglass_at_ghast": {
|
||||
"conditions": {
|
||||
"item": {
|
||||
"items": "minecraft:spyglass"
|
||||
},
|
||||
"player": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type_specific": {
|
||||
"type": "minecraft:player",
|
||||
"looking_at": {
|
||||
"type": "minecraft:ghast"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:using_item"
|
||||
}
|
||||
},
|
||||
"display": {
|
||||
"description": {
|
||||
"translate": "advancements.adventure.spyglass_at_ghast.description"
|
||||
},
|
||||
"icon": {
|
||||
"count": 1,
|
||||
"id": "minecraft:spyglass"
|
||||
},
|
||||
"title": {
|
||||
"translate": "advancements.adventure.spyglass_at_ghast.title"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"spyglass_at_ghast"
|
||||
]
|
||||
],
|
||||
"sends_telemetry_event": true
|
||||
}
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
{
|
||||
"parent": "minecraft:adventure/root",
|
||||
"criteria": {
|
||||
"spyglass_at_parrot": {
|
||||
"conditions": {
|
||||
"item": {
|
||||
"items": "minecraft:spyglass"
|
||||
},
|
||||
"player": [
|
||||
{
|
||||
"condition": "minecraft:entity_properties",
|
||||
"entity": "this",
|
||||
"predicate": {
|
||||
"type_specific": {
|
||||
"type": "minecraft:player",
|
||||
"looking_at": {
|
||||
"type": "minecraft:parrot"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"trigger": "minecraft:using_item"
|
||||
}
|
||||
},
|
||||
"display": {
|
||||
"description": {
|
||||
"translate": "advancements.adventure.spyglass_at_parrot.description"
|
||||
},
|
||||
"icon": {
|
||||
"count": 1,
|
||||
"id": "minecraft:spyglass"
|
||||
},
|
||||
"title": {
|
||||
"translate": "advancements.adventure.spyglass_at_parrot.title"
|
||||
}
|
||||
},
|
||||
"requirements": [
|
||||
[
|
||||
"spyglass_at_parrot"
|
||||
]
|
||||
],
|
||||
"sends_telemetry_event": true
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue