From 58ed872c565fb889ac582ddd618dd7228a537ef7 Mon Sep 17 00:00:00 2001 From: Sotr Date: Thu, 21 Mar 2019 20:59:20 +0800 Subject: [PATCH] Hotfix - packets w/ compatibility and optimization --- .../io/akarin/server/core/PacketType.java | 3 - .../misc/CheckedConcurrentLinkedQueue.java | 979 ------------------ .../net/minecraft/server/NetworkManager.java | 133 ++- .../java/net/minecraft/server/Packet.java | 2 +- .../server/PacketPlayOutAbilities.java | 109 -- .../server/PacketPlayOutAdvancements.java | 114 -- .../server/PacketPlayOutAnimation.java | 36 - .../server/PacketPlayOutAttachEntity.java | 37 - .../server/PacketPlayOutAutoRecipe.java | 36 - .../minecraft/server/PacketPlayOutBed.java | 36 - .../server/PacketPlayOutBlockAction.java | 44 - .../PacketPlayOutBlockBreakAnimation.java | 40 - .../server/PacketPlayOutBlockChange.java | 36 - .../minecraft/server/PacketPlayOutChat.java | 5 - .../server/PacketPlayOutCloseWindow.java | 32 - .../server/PacketPlayOutCollect.java | 40 - .../server/PacketPlayOutCombatEvent.java | 82 -- .../server/PacketPlayOutCommands.java | 269 ----- .../minecraft/server/PacketPlayOutEntity.java | 139 --- .../server/PacketPlayOutEntityTeleport.java | 56 - .../server/PacketPlayOutMapChunk.java | 2 +- .../server/PacketPlayOutOpenWindow.java | 62 -- .../server/PacketPlayOutRespawn.java | 48 - .../server/PacketPlayOutSpawnPosition.java | 5 - .../server/PacketPlayOutStatistic.java | 65 -- .../server/PacketPlayOutTabComplete.java | 69 -- .../server/PacketPlayOutVehicleMove.java | 48 - .../server/PacketPlayOutWindowItems.java | 67 -- .../minecraft/server/PacketStatusOutPong.java | 37 - .../server/PacketStatusOutServerInfo.java | 40 - work/Paper | 2 +- 31 files changed, 67 insertions(+), 2606 deletions(-) delete mode 100644 src/main/java/io/akarin/server/misc/CheckedConcurrentLinkedQueue.java delete mode 100644 src/main/java/net/minecraft/server/PacketPlayOutAbilities.java delete mode 100644 src/main/java/net/minecraft/server/PacketPlayOutAdvancements.java delete mode 100644 src/main/java/net/minecraft/server/PacketPlayOutAnimation.java delete mode 100644 src/main/java/net/minecraft/server/PacketPlayOutAttachEntity.java delete mode 100644 src/main/java/net/minecraft/server/PacketPlayOutAutoRecipe.java delete mode 100644 src/main/java/net/minecraft/server/PacketPlayOutBed.java delete mode 100644 src/main/java/net/minecraft/server/PacketPlayOutBlockAction.java delete mode 100644 src/main/java/net/minecraft/server/PacketPlayOutBlockBreakAnimation.java delete mode 100644 src/main/java/net/minecraft/server/PacketPlayOutBlockChange.java delete mode 100644 src/main/java/net/minecraft/server/PacketPlayOutCloseWindow.java delete mode 100644 src/main/java/net/minecraft/server/PacketPlayOutCollect.java delete mode 100644 src/main/java/net/minecraft/server/PacketPlayOutCombatEvent.java delete mode 100644 src/main/java/net/minecraft/server/PacketPlayOutCommands.java delete mode 100644 src/main/java/net/minecraft/server/PacketPlayOutEntity.java delete mode 100644 src/main/java/net/minecraft/server/PacketPlayOutEntityTeleport.java delete mode 100644 src/main/java/net/minecraft/server/PacketPlayOutOpenWindow.java delete mode 100644 src/main/java/net/minecraft/server/PacketPlayOutRespawn.java delete mode 100644 src/main/java/net/minecraft/server/PacketPlayOutStatistic.java delete mode 100644 src/main/java/net/minecraft/server/PacketPlayOutTabComplete.java delete mode 100644 src/main/java/net/minecraft/server/PacketPlayOutVehicleMove.java delete mode 100644 src/main/java/net/minecraft/server/PacketPlayOutWindowItems.java delete mode 100644 src/main/java/net/minecraft/server/PacketStatusOutPong.java delete mode 100644 src/main/java/net/minecraft/server/PacketStatusOutServerInfo.java diff --git a/src/main/java/io/akarin/server/core/PacketType.java b/src/main/java/io/akarin/server/core/PacketType.java index c163401d6..49dfacf08 100644 --- a/src/main/java/io/akarin/server/core/PacketType.java +++ b/src/main/java/io/akarin/server/core/PacketType.java @@ -1,9 +1,6 @@ package io.akarin.server.core; public enum PacketType { - STATUS_OUT_SERVER_INFO, - STATUS_OUT_PONG, - PLAY_OUT_MAP_CHUNK, PLAY_OUT_SPAWN_POSITION, PLAY_OUT_CHAT, diff --git a/src/main/java/io/akarin/server/misc/CheckedConcurrentLinkedQueue.java b/src/main/java/io/akarin/server/misc/CheckedConcurrentLinkedQueue.java deleted file mode 100644 index c005cce44..000000000 --- a/src/main/java/io/akarin/server/misc/CheckedConcurrentLinkedQueue.java +++ /dev/null @@ -1,979 +0,0 @@ -/* - * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - */ - -/* - * - * - * - * - * - * Written by Doug Lea and Martin Buchholz with assistance from members of - * JCP JSR-166 Expert Group and released to the public domain, as explained - * at http://creativecommons.org/publicdomain/zero/1.0/ - */ - -package io.akarin.server.misc; - -import java.util.AbstractQueue; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Iterator; -import java.util.NoSuchElementException; -import java.util.Queue; -import java.util.Spliterator; -import java.util.Spliterators; -import java.util.function.Consumer; -import java.util.function.Predicate; - -/** - * An unbounded thread-safe {@linkplain Queue queue} based on linked nodes. - * This queue orders elements FIFO (first-in-first-out). - * The head of the queue is that element that has been on the - * queue the longest time. - * The tail of the queue is that element that has been on the - * queue the shortest time. New elements - * are inserted at the tail of the queue, and the queue retrieval - * operations obtain elements at the head of the queue. - * A {@code ConcurrentLinkedQueue} is an appropriate choice when - * many threads will share access to a common collection. - * Like most other concurrent collection implementations, this class - * does not permit the use of {@code null} elements. - * - *

This implementation employs an efficient non-blocking - * algorithm based on one described in Simple, - * Fast, and Practical Non-Blocking and Blocking Concurrent Queue - * Algorithms by Maged M. Michael and Michael L. Scott. - * - *

Iterators are weakly consistent, returning elements - * reflecting the state of the queue at some point at or since the - * creation of the iterator. They do not throw {@link - * java.util.ConcurrentModificationException}, and may proceed concurrently - * with other operations. Elements contained in the queue since the creation - * of the iterator will be returned exactly once. - * - *

Beware that, unlike in most collections, the {@code size} method - * is NOT a constant-time operation. Because of the - * asynchronous nature of these queues, determining the current number - * of elements requires a traversal of the elements, and so may report - * inaccurate results if this collection is modified during traversal. - * Additionally, the bulk operations {@code addAll}, - * {@code removeAll}, {@code retainAll}, {@code containsAll}, - * {@code equals}, and {@code toArray} are not guaranteed - * to be performed atomically. For example, an iterator operating - * concurrently with an {@code addAll} operation might view only some - * of the added elements. - * - *

This class and its iterator implement all of the optional - * methods of the {@link Queue} and {@link Iterator} interfaces. - * - *

Memory consistency effects: As with other concurrent - * collections, actions in a thread prior to placing an object into a - * {@code ConcurrentLinkedQueue} - * happen-before - * actions subsequent to the access or removal of that element from - * the {@code ConcurrentLinkedQueue} in another thread. - * - *

This class is a member of the - * - * Java Collections Framework. - * - * @since 1.5 - * @author Doug Lea - * @param the type of elements held in this collection - */ -public class CheckedConcurrentLinkedQueue extends AbstractQueue - implements Queue, java.io.Serializable { - private static final long serialVersionUID = 196745693267521676L; - - /* - * This is a modification of the Michael & Scott algorithm, - * adapted for a garbage-collected environment, with support for - * interior node deletion (to support remove(Object)). For - * explanation, read the paper. - * - * Note that like most non-blocking algorithms in this package, - * this implementation relies on the fact that in garbage - * collected systems, there is no possibility of ABA problems due - * to recycled nodes, so there is no need to use "counted - * pointers" or related techniques seen in versions used in - * non-GC'ed settings. - * - * The fundamental invariants are: - * - There is exactly one (last) Node with a null next reference, - * which is CASed when enqueueing. This last Node can be - * reached in O(1) time from tail, but tail is merely an - * optimization - it can always be reached in O(N) time from - * head as well. - * - The elements contained in the queue are the non-null items in - * Nodes that are reachable from head. CASing the item - * reference of a Node to null atomically removes it from the - * queue. Reachability of all elements from head must remain - * true even in the case of concurrent modifications that cause - * head to advance. A dequeued Node may remain in use - * indefinitely due to creation of an Iterator or simply a - * poll() that has lost its time slice. - * - * The above might appear to imply that all Nodes are GC-reachable - * from a predecessor dequeued Node. That would cause two problems: - * - allow a rogue Iterator to cause unbounded memory retention - * - cause cross-generational linking of old Nodes to new Nodes if - * a Node was tenured while live, which generational GCs have a - * hard time dealing with, causing repeated major collections. - * However, only non-deleted Nodes need to be reachable from - * dequeued Nodes, and reachability does not necessarily have to - * be of the kind understood by the GC. We use the trick of - * linking a Node that has just been dequeued to itself. Such a - * self-link implicitly means to advance to head. - * - * Both head and tail are permitted to lag. In fact, failing to - * update them every time one could is a significant optimization - * (fewer CASes). As with LinkedTransferQueue (see the internal - * documentation for that class), we use a slack threshold of two; - * that is, we update head/tail when the current pointer appears - * to be two or more steps away from the first/last node. - * - * Since head and tail are updated concurrently and independently, - * it is possible for tail to lag behind head (why not)? - * - * CASing a Node's item reference to null atomically removes the - * element from the queue. Iterators skip over Nodes with null - * items. Prior implementations of this class had a race between - * poll() and remove(Object) where the same element would appear - * to be successfully removed by two concurrent operations. The - * method remove(Object) also lazily unlinks deleted Nodes, but - * this is merely an optimization. - * - * When constructing a Node (before enqueuing it) we avoid paying - * for a volatile write to item by using Unsafe.putObject instead - * of a normal write. This allows the cost of enqueue to be - * "one-and-a-half" CASes. - * - * Both head and tail may or may not point to a Node with a - * non-null item. If the queue is empty, all items must of course - * be null. Upon creation, both head and tail refer to a dummy - * Node with null item. Both head and tail are only updated using - * CAS, so they never regress, although again this is merely an - * optimization. - */ - - private static class Node { - volatile E item; - volatile Node next; - - /** - * Constructs a new node. Uses relaxed write because item can - * only be seen after publication via casNext. - */ - Node(E item) { - UNSAFE.putObject(this, itemOffset, item); - } - - boolean casItem(E cmp, E val) { - return UNSAFE.compareAndSwapObject(this, itemOffset, cmp, val); - } - - void lazySetNext(Node val) { - UNSAFE.putOrderedObject(this, nextOffset, val); - } - - boolean casNext(Node cmp, Node val) { - return UNSAFE.compareAndSwapObject(this, nextOffset, cmp, val); - } - - // Unsafe mechanics - - private static final sun.misc.Unsafe UNSAFE; - private static final long itemOffset; - private static final long nextOffset; - - static { - try { - java.lang.reflect.Field theUnsafe = sun.misc.Unsafe.class.getDeclaredField("theUnsafe"); - theUnsafe.setAccessible(true); - UNSAFE = (sun.misc.Unsafe) theUnsafe.get(null); - Class k = Node.class; - itemOffset = UNSAFE.objectFieldOffset - (k.getDeclaredField("item")); - nextOffset = UNSAFE.objectFieldOffset - (k.getDeclaredField("next")); - } catch (Exception e) { - throw new Error(e); - } - } - } - - /** - * A node from which the first live (non-deleted) node (if any) - * can be reached in O(1) time. - * Invariants: - * - all live nodes are reachable from head via succ() - * - head != null - * - (tmp = head).next != tmp || tmp != head - * Non-invariants: - * - head.item may or may not be null. - * - it is permitted for tail to lag behind head, that is, for tail - * to not be reachable from head! - */ - private transient volatile Node head; - - /** - * A node from which the last node on list (that is, the unique - * node with node.next == null) can be reached in O(1) time. - * Invariants: - * - the last node is always reachable from tail via succ() - * - tail != null - * Non-invariants: - * - tail.item may or may not be null. - * - it is permitted for tail to lag behind head, that is, for tail - * to not be reachable from head! - * - tail.next may or may not be self-pointing to tail. - */ - private transient volatile Node tail; - - /** - * Creates a {@code ConcurrentLinkedQueue} that is initially empty. - */ - public CheckedConcurrentLinkedQueue() { - head = tail = new Node(null); - } - - /** - * Creates a {@code ConcurrentLinkedQueue} - * initially containing the elements of the given collection, - * added in traversal order of the collection's iterator. - * - * @param c the collection of elements to initially contain - * @throws NullPointerException if the specified collection or any - * of its elements are null - */ - public CheckedConcurrentLinkedQueue(Collection c) { - Node h = null, t = null; - for (E e : c) { - checkNotNull(e); - Node newNode = new Node(e); - if (h == null) - h = t = newNode; - else { - t.lazySetNext(newNode); - t = newNode; - } - } - if (h == null) - h = t = new Node(null); - head = h; - tail = t; - } - - // Have to override just to update the javadoc - - /** - * Inserts the specified element at the tail of this queue. - * As the queue is unbounded, this method will never throw - * {@link IllegalStateException} or return {@code false}. - * - * @return {@code true} (as specified by {@link Collection#add}) - * @throws NullPointerException if the specified element is null - */ - public final boolean add(E e) { - return offer(e); - } - - /** - * Tries to CAS head to p. If successful, repoint old head to itself - * as sentinel for succ(), below. - */ - final void updateHead(Node h, Node p) { - if (h != p && casHead(h, p)) - h.lazySetNext(h); - } - - /** - * Returns the successor of p, or the head node if p.next has been - * linked to self, which will only be true if traversing with a - * stale pointer that is now off the list. - */ - final Node succ(Node p) { - Node next = p.next; - return (p == next) ? head : next; - } - - /** - * Inserts the specified element at the tail of this queue. - * As the queue is unbounded, this method will never return {@code false}. - * - * @return {@code true} (as specified by {@link Queue#offer}) - * @throws NullPointerException if the specified element is null - */ - public final boolean offer(E e) { - //checkNotNull(e); - final Node newNode = new Node(e); - - for (Node t = tail, p = t;;) { - Node q = p.next; - if (q == null) { - // p is last node - if (p.casNext(null, newNode)) { - // Successful CAS is the linearization point - // for e to become an element of this queue, - // and for newNode to become "live". - if (p != t) // hop two nodes at a time - casTail(t, newNode); // Failure is OK. - return true; - } - // Lost CAS race to another thread; re-read next - } - else if (p == q) - // We have fallen off list. If tail is unchanged, it - // will also be off-list, in which case we need to - // jump to head, from which all live nodes are always - // reachable. Else the new tail is a better bet. - p = (t != (t = tail)) ? t : head; - else - // Check for tail updates after two hops. - p = (p != t && t != (t = tail)) ? t : q; - } - } - - public E poll() { - restartFromHead: - for (;;) { - for (Node h = head, p = h, q;;) { - E item = p.item; - - if (item != null && p.casItem(item, null)) { - // Successful CAS is the linearization point - // for item to be removed from this queue. - if (p != h) // hop two nodes at a time - updateHead(h, ((q = p.next) != null) ? q : p); - return item; - } - else if ((q = p.next) == null) { - updateHead(h, p); - return null; - } - else if (p == q) - continue restartFromHead; - else - p = q; - } - } - } - - public final E poll(Predicate predicate, E signal) { - restartFromHead: - for (;;) { - for (Node h = head, p = h, q;;) { - E item = p.item; - if (!predicate.test(item)) return signal; - - if (p.casItem(item, null)) { - // Successful CAS is the linearization point - // for item to be removed from this queue. - if (p != h) // hop two nodes at a time - updateHead(h, ((q = p.next) != null) ? q : p); - return item; - } - else if ((q = p.next) == null) { - updateHead(h, p); - return null; - } - else if (p == q) - continue restartFromHead; - else - p = q; - } - } - } - - public E peek() { - restartFromHead: - for (;;) { - for (Node h = head, p = h, q;;) { - E item = p.item; - if (item != null || (q = p.next) == null) { - updateHead(h, p); - return item; - } - else if (p == q) - continue restartFromHead; - else - p = q; - } - } - } - - /** - * Returns the first live (non-deleted) node on list, or null if none. - * This is yet another variant of poll/peek; here returning the - * first node, not element. We could make peek() a wrapper around - * first(), but that would cost an extra volatile read of item, - * and the need to add a retry loop to deal with the possibility - * of losing a race to a concurrent poll(). - */ - Node first() { - restartFromHead: - for (;;) { - for (Node h = head, p = h, q;;) { - boolean hasItem = (p.item != null); - if (hasItem || (q = p.next) == null) { - updateHead(h, p); - return hasItem ? p : null; - } - else if (p == q) - continue restartFromHead; - else - p = q; - } - } - } - - /** - * Returns {@code true} if this queue contains no elements. - * - * @return {@code true} if this queue contains no elements - */ - public boolean isEmpty() { - return first() == null; - } - - /** - * Returns the number of elements in this queue. If this queue - * contains more than {@code Integer.MAX_VALUE} elements, returns - * {@code Integer.MAX_VALUE}. - * - *

Beware that, unlike in most collections, this method is - * NOT a constant-time operation. Because of the - * asynchronous nature of these queues, determining the current - * number of elements requires an O(n) traversal. - * Additionally, if elements are added or removed during execution - * of this method, the returned result may be inaccurate. Thus, - * this method is typically not very useful in concurrent - * applications. - * - * @return the number of elements in this queue - */ - public int size() { - int count = 0; - for (Node p = first(); p != null; p = succ(p)) - if (p.item != null) - // Collection.size() spec says to max out - if (++count == Integer.MAX_VALUE) - break; - return count; - } - - /** - * Returns {@code true} if this queue contains the specified element. - * More formally, returns {@code true} if and only if this queue contains - * at least one element {@code e} such that {@code o.equals(e)}. - * - * @param o object to be checked for containment in this queue - * @return {@code true} if this queue contains the specified element - */ - public boolean contains(Object o) { - if (o == null) return false; - for (Node p = first(); p != null; p = succ(p)) { - E item = p.item; - if (item != null && o.equals(item)) - return true; - } - return false; - } - - /** - * Removes a single instance of the specified element from this queue, - * if it is present. More formally, removes an element {@code e} such - * that {@code o.equals(e)}, if this queue contains one or more such - * elements. - * Returns {@code true} if this queue contained the specified element - * (or equivalently, if this queue changed as a result of the call). - * - * @param o element to be removed from this queue, if present - * @return {@code true} if this queue changed as a result of the call - */ - public boolean remove(Object o) { - if (o != null) { - Node next, pred = null; - for (Node p = first(); p != null; pred = p, p = next) { - boolean removed = false; - E item = p.item; - if (item != null) { - if (!o.equals(item)) { - next = succ(p); - continue; - } - removed = p.casItem(item, null); - } - - next = succ(p); - if (pred != null && next != null) // unlink - pred.casNext(p, next); - if (removed) - return true; - } - } - return false; - } - - /** - * Appends all of the elements in the specified collection to the end of - * this queue, in the order that they are returned by the specified - * collection's iterator. Attempts to {@code addAll} of a queue to - * itself result in {@code IllegalArgumentException}. - * - * @param c the elements to be inserted into this queue - * @return {@code true} if this queue changed as a result of the call - * @throws NullPointerException if the specified collection or any - * of its elements are null - * @throws IllegalArgumentException if the collection is this queue - */ - public boolean addAll(Collection c) { - if (c == this) - // As historically specified in AbstractQueue#addAll - throw new IllegalArgumentException(); - - // Copy c into a private chain of Nodes - Node beginningOfTheEnd = null, last = null; - for (E e : c) { - checkNotNull(e); - Node newNode = new Node(e); - if (beginningOfTheEnd == null) - beginningOfTheEnd = last = newNode; - else { - last.lazySetNext(newNode); - last = newNode; - } - } - if (beginningOfTheEnd == null) - return false; - - // Atomically append the chain at the tail of this collection - for (Node t = tail, p = t;;) { - Node q = p.next; - if (q == null) { - // p is last node - if (p.casNext(null, beginningOfTheEnd)) { - // Successful CAS is the linearization point - // for all elements to be added to this queue. - if (!casTail(t, last)) { - // Try a little harder to update tail, - // since we may be adding many elements. - t = tail; - if (last.next == null) - casTail(t, last); - } - return true; - } - // Lost CAS race to another thread; re-read next - } - else if (p == q) - // We have fallen off list. If tail is unchanged, it - // will also be off-list, in which case we need to - // jump to head, from which all live nodes are always - // reachable. Else the new tail is a better bet. - p = (t != (t = tail)) ? t : head; - else - // Check for tail updates after two hops. - p = (p != t && t != (t = tail)) ? t : q; - } - } - - /** - * Returns an array containing all of the elements in this queue, in - * proper sequence. - * - *

The returned array will be "safe" in that no references to it are - * maintained by this queue. (In other words, this method must allocate - * a new array). The caller is thus free to modify the returned array. - * - *

This method acts as bridge between array-based and collection-based - * APIs. - * - * @return an array containing all of the elements in this queue - */ - public Object[] toArray() { - // Use ArrayList to deal with resizing. - ArrayList al = new ArrayList(); - for (Node p = first(); p != null; p = succ(p)) { - E item = p.item; - if (item != null) - al.add(item); - } - return al.toArray(); - } - - /** - * Returns an array containing all of the elements in this queue, in - * proper sequence; the runtime type of the returned array is that of - * the specified array. If the queue fits in the specified array, it - * is returned therein. Otherwise, a new array is allocated with the - * runtime type of the specified array and the size of this queue. - * - *

If this queue fits in the specified array with room to spare - * (i.e., the array has more elements than this queue), the element in - * the array immediately following the end of the queue is set to - * {@code null}. - * - *

Like the {@link #toArray()} method, this method acts as bridge between - * array-based and collection-based APIs. Further, this method allows - * precise control over the runtime type of the output array, and may, - * under certain circumstances, be used to save allocation costs. - * - *

Suppose {@code x} is a queue known to contain only strings. - * The following code can be used to dump the queue into a newly - * allocated array of {@code String}: - * - *

 {@code String[] y = x.toArray(new String[0]);}
- * - * Note that {@code toArray(new Object[0])} is identical in function to - * {@code toArray()}. - * - * @param a the array into which the elements of the queue are to - * be stored, if it is big enough; otherwise, a new array of the - * same runtime type is allocated for this purpose - * @return an array containing all of the elements in this queue - * @throws ArrayStoreException if the runtime type of the specified array - * is not a supertype of the runtime type of every element in - * this queue - * @throws NullPointerException if the specified array is null - */ - @SuppressWarnings("unchecked") - public T[] toArray(T[] a) { - // try to use sent-in array - int k = 0; - Node p; - for (p = first(); p != null && k < a.length; p = succ(p)) { - E item = p.item; - if (item != null) - a[k++] = (T)item; - } - if (p == null) { - if (k < a.length) - a[k] = null; - return a; - } - - // If won't fit, use ArrayList version - ArrayList al = new ArrayList(); - for (Node q = first(); q != null; q = succ(q)) { - E item = q.item; - if (item != null) - al.add(item); - } - return al.toArray(a); - } - - /** - * Returns an iterator over the elements in this queue in proper sequence. - * The elements will be returned in order from first (head) to last (tail). - * - *

The returned iterator is - * weakly consistent. - * - * @return an iterator over the elements in this queue in proper sequence - */ - public Iterator iterator() { - return new Itr(); - } - - private class Itr implements Iterator { - /** - * Next node to return item for. - */ - private Node nextNode; - - /** - * nextItem holds on to item fields because once we claim - * that an element exists in hasNext(), we must return it in - * the following next() call even if it was in the process of - * being removed when hasNext() was called. - */ - private E nextItem; - - /** - * Node of the last returned item, to support remove. - */ - private Node lastRet; - - Itr() { - advance(); - } - - /** - * Moves to next valid node and returns item to return for - * next(), or null if no such. - */ - private E advance() { - lastRet = nextNode; - E x = nextItem; - - Node pred, p; - if (nextNode == null) { - p = first(); - pred = null; - } else { - pred = nextNode; - p = succ(nextNode); - } - - for (;;) { - if (p == null) { - nextNode = null; - nextItem = null; - return x; - } - E item = p.item; - if (item != null) { - nextNode = p; - nextItem = item; - return x; - } else { - // skip over nulls - Node next = succ(p); - if (pred != null && next != null) - pred.casNext(p, next); - p = next; - } - } - } - - public boolean hasNext() { - return nextNode != null; - } - - public E next() { - if (nextNode == null) throw new NoSuchElementException(); - return advance(); - } - - public void remove() { - Node l = lastRet; - if (l == null) throw new IllegalStateException(); - // rely on a future traversal to relink. - l.item = null; - lastRet = null; - } - } - - /** - * Saves this queue to a stream (that is, serializes it). - * - * @param s the stream - * @throws java.io.IOException if an I/O error occurs - * @serialData All of the elements (each an {@code E}) in - * the proper order, followed by a null - */ - private void writeObject(java.io.ObjectOutputStream s) - throws java.io.IOException { - - // Write out any hidden stuff - s.defaultWriteObject(); - - // Write out all elements in the proper order. - for (Node p = first(); p != null; p = succ(p)) { - Object item = p.item; - if (item != null) - s.writeObject(item); - } - - // Use trailing null as sentinel - s.writeObject(null); - } - - /** - * Reconstitutes this queue from a stream (that is, deserializes it). - * @param s the stream - * @throws ClassNotFoundException if the class of a serialized object - * could not be found - * @throws java.io.IOException if an I/O error occurs - */ - private void readObject(java.io.ObjectInputStream s) - throws java.io.IOException, ClassNotFoundException { - s.defaultReadObject(); - - // Read in elements until trailing null sentinel found - Node h = null, t = null; - Object item; - while ((item = s.readObject()) != null) { - @SuppressWarnings("unchecked") - Node newNode = new Node((E) item); - if (h == null) - h = t = newNode; - else { - t.lazySetNext(newNode); - t = newNode; - } - } - if (h == null) - h = t = new Node(null); - head = h; - tail = t; - } - - /** A customized variant of Spliterators.IteratorSpliterator */ - static final class CLQSpliterator implements Spliterator { - static final int MAX_BATCH = 1 << 25; // max batch array size; - final CheckedConcurrentLinkedQueue queue; - Node current; // current node; null until initialized - int batch; // batch size for splits - boolean exhausted; // true when no more nodes - CLQSpliterator(CheckedConcurrentLinkedQueue queue) { - this.queue = queue; - } - - public Spliterator trySplit() { - Node p; - final CheckedConcurrentLinkedQueue q = this.queue; - int b = batch; - int n = (b <= 0) ? 1 : (b >= MAX_BATCH) ? MAX_BATCH : b + 1; - if (!exhausted && - ((p = current) != null || (p = q.first()) != null) && - p.next != null) { - Object[] a = new Object[n]; - int i = 0; - do { - if ((a[i] = p.item) != null) - ++i; - if (p == (p = p.next)) - p = q.first(); - } while (p != null && i < n); - if ((current = p) == null) - exhausted = true; - if (i > 0) { - batch = i; - return Spliterators.spliterator - (a, 0, i, Spliterator.ORDERED | Spliterator.NONNULL | - Spliterator.CONCURRENT); - } - } - return null; - } - - public void forEachRemaining(Consumer action) { - Node p; - if (action == null) throw new NullPointerException(); - final CheckedConcurrentLinkedQueue q = this.queue; - if (!exhausted && - ((p = current) != null || (p = q.first()) != null)) { - exhausted = true; - do { - E e = p.item; - if (p == (p = p.next)) - p = q.first(); - if (e != null) - action.accept(e); - } while (p != null); - } - } - - public boolean tryAdvance(Consumer action) { - Node p; - if (action == null) throw new NullPointerException(); - final CheckedConcurrentLinkedQueue q = this.queue; - if (!exhausted && - ((p = current) != null || (p = q.first()) != null)) { - E e; - do { - e = p.item; - if (p == (p = p.next)) - p = q.first(); - } while (e == null && p != null); - if ((current = p) == null) - exhausted = true; - if (e != null) { - action.accept(e); - return true; - } - } - return false; - } - - public long estimateSize() { return Long.MAX_VALUE; } - - public int characteristics() { - return Spliterator.ORDERED | Spliterator.NONNULL | - Spliterator.CONCURRENT; - } - } - - /** - * Returns a {@link Spliterator} over the elements in this queue. - * - *

The returned spliterator is - * weakly consistent. - * - *

The {@code Spliterator} reports {@link Spliterator#CONCURRENT}, - * {@link Spliterator#ORDERED}, and {@link Spliterator#NONNULL}. - * - * @implNote - * The {@code Spliterator} implements {@code trySplit} to permit limited - * parallelism. - * - * @return a {@code Spliterator} over the elements in this queue - * @since 1.8 - */ - @Override - public Spliterator spliterator() { - return new CLQSpliterator(this); - } - - /** - * Throws NullPointerException if argument is null. - * - * @param v the element - */ - private static void checkNotNull(Object v) { - if (v == null) - throw new NullPointerException(); - } - - private boolean casTail(Node cmp, Node val) { - return UNSAFE.compareAndSwapObject(this, tailOffset, cmp, val); - } - - private boolean casHead(Node cmp, Node val) { - return UNSAFE.compareAndSwapObject(this, headOffset, cmp, val); - } - - // Unsafe mechanics - - private static final sun.misc.Unsafe UNSAFE; - private static final long headOffset; - private static final long tailOffset; - static { - try { - java.lang.reflect.Field theUnsafe = sun.misc.Unsafe.class.getDeclaredField("theUnsafe"); - theUnsafe.setAccessible(true); - UNSAFE = (sun.misc.Unsafe) theUnsafe.get(null); - Class k = CheckedConcurrentLinkedQueue.class; - headOffset = UNSAFE.objectFieldOffset - (k.getDeclaredField("head")); - tailOffset = UNSAFE.objectFieldOffset - (k.getDeclaredField("tail")); - } catch (Exception e) { - throw new Error(e); - } - } -} diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java index 0797e00eb..580db800d 100644 --- a/src/main/java/net/minecraft/server/NetworkManager.java +++ b/src/main/java/net/minecraft/server/NetworkManager.java @@ -1,6 +1,8 @@ package net.minecraft.server; import com.google.common.collect.Lists; +import com.google.common.collect.Queues; +import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ThreadFactoryBuilder; import io.akarin.server.core.PacketType; @@ -8,6 +10,7 @@ import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelFutureListener; import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelPromise; import io.netty.channel.DefaultEventLoopGroup; import io.netty.channel.SimpleChannelInboundHandler; import io.netty.channel.epoll.EpollEventLoopGroup; @@ -18,10 +21,13 @@ import io.netty.handler.timeout.TimeoutException; import io.netty.util.AttributeKey; import io.netty.util.concurrent.Future; import io.netty.util.concurrent.GenericFutureListener; +import io.netty.util.concurrent.PromiseNotifier; import java.net.SocketAddress; +import java.nio.channels.Channels; import java.util.Iterator; import java.util.Queue; +import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.locks.ReentrantReadWriteLock; import javax.annotation.Nullable; import javax.crypto.SecretKey; @@ -47,7 +53,8 @@ public class NetworkManager extends SimpleChannelInboundHandler> { return new DefaultEventLoopGroup(0, (new ThreadFactoryBuilder()).setNameFormat("Netty Local Client IO #%d").setDaemon(true).build()); }); private final EnumProtocolDirection h; - private final io.akarin.server.misc.CheckedConcurrentLinkedQueue packetQueue = new io.akarin.server.misc.CheckedConcurrentLinkedQueue(); private final Queue getPacketQueue() { return this.packetQueue; } // Paper - OBFHELPER // Akarin + private final ConcurrentLinkedQueue packetQueue = new ConcurrentLinkedQueue(); private final Queue getPacketQueue() { return this.packetQueue; } // Paper - OBFHELPER // Akarin + private final Queue pendingChunkQueue = Lists.newLinkedList(); // Akarin - remove packet queue private final ReentrantReadWriteLock j = new ReentrantReadWriteLock(); public Channel channel; public SocketAddress socketAddress; public void setSpoofedRemoteAddress(SocketAddress address) { this.socketAddress = address; } // Paper - OBFHELPER @@ -165,80 +172,53 @@ public class NetworkManager extends SimpleChannelInboundHandler> { this.packetListener = packetlistener; } - public final void sendPacket(Packet packet) { // Akarin - add final + public void sendPacket(Packet packet) { this.sendPacket(packet, (GenericFutureListener) null); } // Akarin start public final void sendPackets(Packet packet0, Packet packet1) { if (this.isConnected()) { // why send packet to whom not connected? - this.j.readLock().lock(); - try { - // Send queued packets - this.sendPacketQueueUnsafe(); + //this.j.readLock().lock(); + //try { // Queue new packets - this.packetQueue.offer(new QueuedPacket(packet0, null)); - this.packetQueue.offer(new QueuedPacket(packet1, null)); - } finally { - this.j.readLock().unlock(); - } + this.dispatchPacket(packet0, null); + this.dispatchPacket(packet1, null); + //} finally { + // this.j.readLock().unlock(); + //} } } public final void sendPackets(Packet packet0, Packet packet1, Packet packet2) { if (this.isConnected()) { // why send packet to whom not connected? - this.j.readLock().lock(); - try { - // Send queued packets - this.sendPacketQueueUnsafe(); + //this.j.readLock().lock(); + //try { // Queue new packets - this.packetQueue.offer(new QueuedPacket(packet0, null)); - this.packetQueue.offer(new QueuedPacket(packet1, null)); - this.packetQueue.offer(new QueuedPacket(packet2, null)); - } finally { - this.j.readLock().unlock(); - } + this.dispatchPacket(packet0, null); + this.dispatchPacket(packet1, null); + this.dispatchPacket(packet2, null); + //} finally { + //this.j.readLock().unlock(); + //} } } public final void sendPackets(Packet packet0, Packet packet1, Packet packet2, Packet packet3, Packet packet4, Packet packet5, Packet packet6) { if (this.isConnected()) { // why send packet to whom not connected? - this.j.readLock().lock(); - try { - // Send queued packets - this.sendPacketQueueUnsafe(); + //this.j.readLock().lock(); + //try { // Queue new packets - this.packetQueue.offer(new QueuedPacket(packet0, null)); - this.packetQueue.offer(new QueuedPacket(packet1, null)); - this.packetQueue.offer(new QueuedPacket(packet2, null)); - this.packetQueue.offer(new QueuedPacket(packet3, null)); - this.packetQueue.offer(new QueuedPacket(packet4, null)); - this.packetQueue.offer(new QueuedPacket(packet5, null)); - this.packetQueue.offer(new QueuedPacket(packet6, null)); - } finally { - this.j.readLock().unlock(); - } - } - } - - private final void dispatchOrQueuePacketUnsafe(Packet packet, @Nullable GenericFutureListener> genericfuturelistener) { - if (packet.canDispatchImmediately()) { - this.dispatchPacket(packet, genericfuturelistener); - } else { - this.packetQueue.offer(new QueuedPacket(packet, genericfuturelistener)); - } - } - - private final void sendPacketQueueUnsafe() { - while (!this.packetQueue.isEmpty()) { - QueuedPacket queuedPacket = this.packetQueue.poll(packet -> - packet != null && ( - !(packet.getPacket().getType() == PacketType.PLAY_OUT_MAP_CHUNK) || - (((PacketPlayOutMapChunk) packet.getPacket()).isReady()) - ), null); - - if (queuedPacket != null) - this.dispatchPacket(queuedPacket.getPacket(), queuedPacket.getGenericFutureListener()); + this.dispatchPacket(packet0, null); + this.dispatchPacket(packet1, null); + this.dispatchPacket(packet2, null); + this.dispatchPacket(packet3, null); + this.dispatchPacket(packet4, null); + this.dispatchPacket(packet5, null); + this.dispatchPacket(packet6, null); + //} finally { + //this.j.readLock().unlock(); + //} } } // Akarin end @@ -246,16 +226,13 @@ public class NetworkManager extends SimpleChannelInboundHandler> { if (this.isConnected() /*&& this.sendPacketQueue() && !(packet instanceof PacketPlayOutMapChunk && !((PacketPlayOutMapChunk) packet).isReady())*/) { // Paper - Async-Anti-Xray - Add chunk packets which are not ready or all packets if the packet queue contains chunk packets which are not ready to the packet queue and send the packets later in the right order // Akarin //this.o(); // Paper - Async-Anti-Xray - Move to if statement (this.sendPacketQueue()) // Akarin start - this.j.readLock().lock(); - try { - // Send queued packets - this.sendPacketQueueUnsafe(); + //this.j.readLock().lock(); + //try { // Dispatch or queue new packets - this.dispatchOrQueuePacketUnsafe(packet, genericfuturelistener); - } finally { - this.j.readLock().unlock(); - } - //this.dispatchPacket(packet, genericfuturelistener); + this.dispatchPacket(packet, genericfuturelistener); + //} finally { + // this.j.readLock().unlock(); + //} } else if (false) { // Akarin end this.j.writeLock().lock(); @@ -269,8 +246,14 @@ public class NetworkManager extends SimpleChannelInboundHandler> { } - private final void dispatchPacket(Packet packet, @Nullable GenericFutureListener> genericFutureListener) { this.b(packet, genericFutureListener); } // Paper - OBFHELPER // Akarin - add final - private void b(Packet packet, @Nullable GenericFutureListener> genericfuturelistener) { + // Akarin start + private final void dispatchPacket(Packet packet, @Nullable GenericFutureListener> genericFutureListener) { this.b(packet, genericFutureListener); } // Paper - OBFHELPER + private final void b(Packet packet, @Nullable GenericFutureListener> genericfuturelistener) { + if (!packet.canDispatchImmediately() && packet.getType() == PacketType.PLAY_OUT_MAP_CHUNK) { + this.pendingChunkQueue.add((PacketPlayOutMapChunk) packet); + return; + } + // Akarin end EnumProtocol enumprotocol = EnumProtocol.a(packet); EnumProtocol enumprotocol1 = (EnumProtocol) this.channel.attr(NetworkManager.c).get(); @@ -323,6 +306,16 @@ public class NetworkManager extends SimpleChannelInboundHandler> { private boolean sendPacketQueue() { return this.o(); } // OBFHELPER // void -> boolean private boolean o() { // void -> boolean if (this.channel != null && this.channel.isOpen()) { + // Akarin start + Iterator iterator = this.pendingChunkQueue.iterator(); + while (iterator.hasNext()) { + PacketPlayOutMapChunk packet = iterator.next(); + if (packet.isReady()) { + this.dispatchPacket(packet, null); + iterator.remove(); + } + } + /* if (this.packetQueue.isEmpty()) { // return if the packet queue is empty so that the write lock by Anti-Xray doesn't affect the vanilla performance at all return true; } @@ -334,7 +327,7 @@ public class NetworkManager extends SimpleChannelInboundHandler> { NetworkManager.QueuedPacket networkmanager_queuedpacket = (NetworkManager.QueuedPacket) this.getPacketQueue().peek(); // poll -> peek if (networkmanager_queuedpacket != null) { // Fix NPE (Spigot bug caused by handleDisconnection()) - if (networkmanager_queuedpacket.getPacket().getType() == PacketType.PLAY_OUT_MAP_CHUNK && !((PacketPlayOutMapChunk) networkmanager_queuedpacket.getPacket()).isReady()) { // Check if the peeked packet is a chunk packet which is not ready + if (networkmanager_queuedpacket.getPacket() instanceof PacketPlayOutMapChunk && !((PacketPlayOutMapChunk) networkmanager_queuedpacket.getPacket()).isReady()) { // Check if the peeked packet is a chunk packet which is not ready return false; // Return false if the peeked packet is a chunk packet which is not ready } else { this.getPacketQueue().poll(); // poll here @@ -345,6 +338,8 @@ public class NetworkManager extends SimpleChannelInboundHandler> { } finally { this.j.writeLock().unlock(); // readLock -> writeLock (because of race condition between peek and poll) } + */ + // Akarin end } @@ -353,7 +348,7 @@ public class NetworkManager extends SimpleChannelInboundHandler> { // Paper end public void a() { - this.o(); + //this.o(); // Akarin - remove packet queue if (this.packetListener instanceof ITickable) { ((ITickable) this.packetListener).tick(); } diff --git a/src/main/java/net/minecraft/server/Packet.java b/src/main/java/net/minecraft/server/Packet.java index 8e0f8cf67..09b6d882b 100644 --- a/src/main/java/net/minecraft/server/Packet.java +++ b/src/main/java/net/minecraft/server/Packet.java @@ -27,7 +27,7 @@ public interface Packet { } public default boolean canDispatchImmediately() { - return false; + return true; } // Akarin end } diff --git a/src/main/java/net/minecraft/server/PacketPlayOutAbilities.java b/src/main/java/net/minecraft/server/PacketPlayOutAbilities.java deleted file mode 100644 index 99f111167..000000000 --- a/src/main/java/net/minecraft/server/PacketPlayOutAbilities.java +++ /dev/null @@ -1,109 +0,0 @@ -package net.minecraft.server; - -import java.io.IOException; - -public class PacketPlayOutAbilities implements Packet { - - private boolean a; - private boolean b; - private boolean c; - private boolean d; - private float e; - private float f; - - public PacketPlayOutAbilities() {} - - public PacketPlayOutAbilities(PlayerAbilities playerabilities) { - this.a(playerabilities.isInvulnerable); - this.b(playerabilities.isFlying); - this.c(playerabilities.canFly); - this.d(playerabilities.canInstantlyBuild); - this.a(playerabilities.a()); - this.b(playerabilities.b()); - } - - public void a(PacketDataSerializer packetdataserializer) throws IOException { - byte b0 = packetdataserializer.readByte(); - - this.a((b0 & 1) > 0); - this.b((b0 & 2) > 0); - this.c((b0 & 4) > 0); - this.d((b0 & 8) > 0); - this.a(packetdataserializer.readFloat()); - this.b(packetdataserializer.readFloat()); - } - - public void b(PacketDataSerializer packetdataserializer) throws IOException { - byte b0 = 0; - - if (this.b()) { - b0 = (byte) (b0 | 1); - } - - if (this.c()) { - b0 = (byte) (b0 | 2); - } - - if (this.d()) { - b0 = (byte) (b0 | 4); - } - - if (this.e()) { - b0 = (byte) (b0 | 8); - } - - packetdataserializer.writeByte(b0); - packetdataserializer.writeFloat(this.e); - packetdataserializer.writeFloat(this.f); - } - - public void a(PacketListenerPlayOut packetlistenerplayout) { - packetlistenerplayout.a(this); - } - - public boolean b() { - return this.a; - } - - public void a(boolean flag) { - this.a = flag; - } - - public boolean c() { - return this.b; - } - - public void b(boolean flag) { - this.b = flag; - } - - public boolean d() { - return this.c; - } - - public void c(boolean flag) { - this.c = flag; - } - - public boolean e() { - return this.d; - } - - public void d(boolean flag) { - this.d = flag; - } - - public void a(float f) { - this.e = f; - } - - public void b(float f) { - this.f = f; - } - // Akarin start - @Override - public boolean canDispatchImmediately() { - return true; - } - // Akarin end -} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutAdvancements.java b/src/main/java/net/minecraft/server/PacketPlayOutAdvancements.java deleted file mode 100644 index 88d130c54..000000000 --- a/src/main/java/net/minecraft/server/PacketPlayOutAdvancements.java +++ /dev/null @@ -1,114 +0,0 @@ -package net.minecraft.server; - -import com.google.common.collect.Maps; -import com.google.common.collect.Sets; -import java.io.IOException; -import java.util.Collection; -import java.util.Iterator; -import java.util.Map; -import java.util.Set; -import java.util.Map.Entry; - -public class PacketPlayOutAdvancements implements Packet { - - private boolean a; - private Map b; - private Set c; - private Map d; - - public PacketPlayOutAdvancements() {} - - public PacketPlayOutAdvancements(boolean flag, Collection collection, Set set, Map map) { - this.a = flag; - this.b = Maps.newHashMap(); - Iterator iterator = collection.iterator(); - - while (iterator.hasNext()) { - Advancement advancement = (Advancement) iterator.next(); - - this.b.put(advancement.getName(), advancement.a()); - } - - this.c = set; - this.d = Maps.newHashMap(map); - } - - public void a(PacketListenerPlayOut packetlistenerplayout) { - packetlistenerplayout.a(this); - } - - public void a(PacketDataSerializer packetdataserializer) throws IOException { - this.a = packetdataserializer.readBoolean(); - this.b = Maps.newHashMap(); - this.c = Sets.newLinkedHashSet(); - this.d = Maps.newHashMap(); - int i = packetdataserializer.g(); - - MinecraftKey minecraftkey; - int j; - - for (j = 0; j < i; ++j) { - minecraftkey = packetdataserializer.l(); - Advancement.SerializedAdvancement advancement_serializedadvancement = Advancement.SerializedAdvancement.b(packetdataserializer); - - this.b.put(minecraftkey, advancement_serializedadvancement); - } - - i = packetdataserializer.g(); - - for (j = 0; j < i; ++j) { - minecraftkey = packetdataserializer.l(); - this.c.add(minecraftkey); - } - - i = packetdataserializer.g(); - - for (j = 0; j < i; ++j) { - minecraftkey = packetdataserializer.l(); - this.d.put(minecraftkey, AdvancementProgress.b(packetdataserializer)); - } - - } - - public void b(PacketDataSerializer packetdataserializer) throws IOException { - packetdataserializer.writeBoolean(this.a); - packetdataserializer.d(this.b.size()); - Iterator iterator = this.b.entrySet().iterator(); - - Entry entry; - - while (iterator.hasNext()) { - entry = (Entry) iterator.next(); - MinecraftKey minecraftkey = (MinecraftKey) entry.getKey(); - Advancement.SerializedAdvancement advancement_serializedadvancement = (Advancement.SerializedAdvancement) entry.getValue(); - - packetdataserializer.a(minecraftkey); - advancement_serializedadvancement.a(packetdataserializer); - } - - packetdataserializer.d(this.c.size()); - iterator = this.c.iterator(); - - while (iterator.hasNext()) { - MinecraftKey minecraftkey1 = (MinecraftKey) iterator.next(); - - packetdataserializer.a(minecraftkey1); - } - - packetdataserializer.d(this.d.size()); - iterator = this.d.entrySet().iterator(); - - while (iterator.hasNext()) { - entry = (Entry) iterator.next(); - packetdataserializer.a((MinecraftKey) entry.getKey()); - ((AdvancementProgress) entry.getValue()).a(packetdataserializer); - } - - } - // Akarin start - @Override - public boolean canDispatchImmediately() { - return true; - } - // Akarin end -} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutAnimation.java b/src/main/java/net/minecraft/server/PacketPlayOutAnimation.java deleted file mode 100644 index 9250a94f2..000000000 --- a/src/main/java/net/minecraft/server/PacketPlayOutAnimation.java +++ /dev/null @@ -1,36 +0,0 @@ -package net.minecraft.server; - -import java.io.IOException; - -public class PacketPlayOutAnimation implements Packet { - - private int a; - private int b; - - public PacketPlayOutAnimation() {} - - public PacketPlayOutAnimation(Entity entity, int i) { - this.a = entity.getId(); - this.b = i; - } - - public void a(PacketDataSerializer packetdataserializer) throws IOException { - this.a = packetdataserializer.g(); - this.b = packetdataserializer.readUnsignedByte(); - } - - public void b(PacketDataSerializer packetdataserializer) throws IOException { - packetdataserializer.d(this.a); - packetdataserializer.writeByte(this.b); - } - - public void a(PacketListenerPlayOut packetlistenerplayout) { - packetlistenerplayout.a(this); - } - // Akarin start - @Override - public boolean canDispatchImmediately() { - return true; - } - // Akarin end -} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutAttachEntity.java b/src/main/java/net/minecraft/server/PacketPlayOutAttachEntity.java deleted file mode 100644 index 8508bba7d..000000000 --- a/src/main/java/net/minecraft/server/PacketPlayOutAttachEntity.java +++ /dev/null @@ -1,37 +0,0 @@ -package net.minecraft.server; - -import java.io.IOException; -import javax.annotation.Nullable; - -public class PacketPlayOutAttachEntity implements Packet { - - private int a; - private int b; - - public PacketPlayOutAttachEntity() {} - - public PacketPlayOutAttachEntity(Entity entity, @Nullable Entity entity1) { - this.a = entity.getId(); - this.b = entity1 != null ? entity1.getId() : -1; - } - - public void a(PacketDataSerializer packetdataserializer) throws IOException { - this.a = packetdataserializer.readInt(); - this.b = packetdataserializer.readInt(); - } - - public void b(PacketDataSerializer packetdataserializer) throws IOException { - packetdataserializer.writeInt(this.a); - packetdataserializer.writeInt(this.b); - } - - public void a(PacketListenerPlayOut packetlistenerplayout) { - packetlistenerplayout.a(this); - } - // Akarin start - @Override - public boolean canDispatchImmediately() { - return true; - } - // Akarin end -} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutAutoRecipe.java b/src/main/java/net/minecraft/server/PacketPlayOutAutoRecipe.java deleted file mode 100644 index ebc982afd..000000000 --- a/src/main/java/net/minecraft/server/PacketPlayOutAutoRecipe.java +++ /dev/null @@ -1,36 +0,0 @@ -package net.minecraft.server; - -import java.io.IOException; - -public class PacketPlayOutAutoRecipe implements Packet { - - private int a; - private MinecraftKey b; - - public PacketPlayOutAutoRecipe() {} - - public PacketPlayOutAutoRecipe(int i, IRecipe irecipe) { - this.a = i; - this.b = irecipe.getKey(); - } - - public void a(PacketDataSerializer packetdataserializer) throws IOException { - this.a = packetdataserializer.readByte(); - this.b = packetdataserializer.l(); - } - - public void b(PacketDataSerializer packetdataserializer) throws IOException { - packetdataserializer.writeByte(this.a); - packetdataserializer.a(this.b); - } - - public void a(PacketListenerPlayOut packetlistenerplayout) { - packetlistenerplayout.a(this); - } - // Akarin start - @Override - public boolean canDispatchImmediately() { - return true; - } - // Akarin end -} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutBed.java b/src/main/java/net/minecraft/server/PacketPlayOutBed.java deleted file mode 100644 index 8f391a3a5..000000000 --- a/src/main/java/net/minecraft/server/PacketPlayOutBed.java +++ /dev/null @@ -1,36 +0,0 @@ -package net.minecraft.server; - -import java.io.IOException; - -public class PacketPlayOutBed implements Packet { - - private int a; - private BlockPosition b; - - public PacketPlayOutBed() {} - - public PacketPlayOutBed(EntityHuman entityhuman, BlockPosition blockposition) { - this.a = entityhuman.getId(); - this.b = blockposition; - } - - public void a(PacketDataSerializer packetdataserializer) throws IOException { - this.a = packetdataserializer.g(); - this.b = packetdataserializer.e(); - } - - public void b(PacketDataSerializer packetdataserializer) throws IOException { - packetdataserializer.d(this.a); - packetdataserializer.a(this.b); - } - - public void a(PacketListenerPlayOut packetlistenerplayout) { - packetlistenerplayout.a(this); - } - // Akarin start - @Override - public boolean canDispatchImmediately() { - return true; - } - // Akarin end -} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutBlockAction.java b/src/main/java/net/minecraft/server/PacketPlayOutBlockAction.java deleted file mode 100644 index 618f06a18..000000000 --- a/src/main/java/net/minecraft/server/PacketPlayOutBlockAction.java +++ /dev/null @@ -1,44 +0,0 @@ -package net.minecraft.server; - -import java.io.IOException; - -public class PacketPlayOutBlockAction implements Packet { - - private BlockPosition a; - private int b; - private int c; - private Block d; - - public PacketPlayOutBlockAction() {} - - public PacketPlayOutBlockAction(BlockPosition blockposition, Block block, int i, int j) { - this.a = blockposition; - this.d = block; - this.b = i; - this.c = j; - } - - public void a(PacketDataSerializer packetdataserializer) throws IOException { - this.a = packetdataserializer.e(); - this.b = packetdataserializer.readUnsignedByte(); - this.c = packetdataserializer.readUnsignedByte(); - this.d = (Block) IRegistry.BLOCK.fromId(packetdataserializer.g()); - } - - public void b(PacketDataSerializer packetdataserializer) throws IOException { - packetdataserializer.a(this.a); - packetdataserializer.writeByte(this.b); - packetdataserializer.writeByte(this.c); - packetdataserializer.d(IRegistry.BLOCK.a(this.d)); // Akarin - fixes decompile error - } - - public void a(PacketListenerPlayOut packetlistenerplayout) { - packetlistenerplayout.a(this); - } - // Akarin start - @Override - public boolean canDispatchImmediately() { - return true; - } - // Akarin end -} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutBlockBreakAnimation.java b/src/main/java/net/minecraft/server/PacketPlayOutBlockBreakAnimation.java deleted file mode 100644 index b4788afed..000000000 --- a/src/main/java/net/minecraft/server/PacketPlayOutBlockBreakAnimation.java +++ /dev/null @@ -1,40 +0,0 @@ -package net.minecraft.server; - -import java.io.IOException; - -public class PacketPlayOutBlockBreakAnimation implements Packet { - - private int a; - private BlockPosition b; - private int c; - - public PacketPlayOutBlockBreakAnimation() {} - - public PacketPlayOutBlockBreakAnimation(int i, BlockPosition blockposition, int j) { - this.a = i; - this.b = blockposition; - this.c = j; - } - - public void a(PacketDataSerializer packetdataserializer) throws IOException { - this.a = packetdataserializer.g(); - this.b = packetdataserializer.e(); - this.c = packetdataserializer.readUnsignedByte(); - } - - public void b(PacketDataSerializer packetdataserializer) throws IOException { - packetdataserializer.d(this.a); - packetdataserializer.a(this.b); - packetdataserializer.writeByte(this.c); - } - - public void a(PacketListenerPlayOut packetlistenerplayout) { - packetlistenerplayout.a(this); - } - // Akarin start - @Override - public boolean canDispatchImmediately() { - return true; - } - // Akarin end -} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutBlockChange.java b/src/main/java/net/minecraft/server/PacketPlayOutBlockChange.java deleted file mode 100644 index d84c4c2ca..000000000 --- a/src/main/java/net/minecraft/server/PacketPlayOutBlockChange.java +++ /dev/null @@ -1,36 +0,0 @@ -package net.minecraft.server; - -import java.io.IOException; - -public class PacketPlayOutBlockChange implements Packet { - - private BlockPosition a; - public IBlockData block; - - public PacketPlayOutBlockChange() {} - - public PacketPlayOutBlockChange(IBlockAccess iblockaccess, BlockPosition blockposition) { - this.a = blockposition; - this.block = iblockaccess.getType(blockposition); - } - - public void a(PacketDataSerializer packetdataserializer) throws IOException { - this.a = packetdataserializer.e(); - this.block = (IBlockData) Block.REGISTRY_ID.fromId(packetdataserializer.g()); - } - - public void b(PacketDataSerializer packetdataserializer) throws IOException { - packetdataserializer.a(this.a); - packetdataserializer.d(Block.getCombinedId(this.block)); - } - - public void a(PacketListenerPlayOut packetlistenerplayout) { - packetlistenerplayout.a(this); - } - // Akarin start - @Override - public boolean canDispatchImmediately() { - return true; - } - // Akarin end -} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutChat.java b/src/main/java/net/minecraft/server/PacketPlayOutChat.java index d48be638c..22fa46b0d 100644 --- a/src/main/java/net/minecraft/server/PacketPlayOutChat.java +++ b/src/main/java/net/minecraft/server/PacketPlayOutChat.java @@ -62,10 +62,5 @@ public class PacketPlayOutChat implements Packet { public io.akarin.server.core.PacketType getType() { return io.akarin.server.core.PacketType.PLAY_OUT_CHAT; } - - @Override - public boolean canDispatchImmediately() { - return true; - } // Akarin end } diff --git a/src/main/java/net/minecraft/server/PacketPlayOutCloseWindow.java b/src/main/java/net/minecraft/server/PacketPlayOutCloseWindow.java deleted file mode 100644 index 07719bf07..000000000 --- a/src/main/java/net/minecraft/server/PacketPlayOutCloseWindow.java +++ /dev/null @@ -1,32 +0,0 @@ -package net.minecraft.server; - -import java.io.IOException; - -public class PacketPlayOutCloseWindow implements Packet { - - private int a; - - public PacketPlayOutCloseWindow() {} - - public PacketPlayOutCloseWindow(int i) { - this.a = i; - } - - public void a(PacketListenerPlayOut packetlistenerplayout) { - packetlistenerplayout.a(this); - } - - public void a(PacketDataSerializer packetdataserializer) throws IOException { - this.a = packetdataserializer.readUnsignedByte(); - } - - public void b(PacketDataSerializer packetdataserializer) throws IOException { - packetdataserializer.writeByte(this.a); - } - // Akarin start - @Override - public boolean canDispatchImmediately() { - return true; - } - // Akarin end -} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutCollect.java b/src/main/java/net/minecraft/server/PacketPlayOutCollect.java deleted file mode 100644 index 1ccb355aa..000000000 --- a/src/main/java/net/minecraft/server/PacketPlayOutCollect.java +++ /dev/null @@ -1,40 +0,0 @@ -package net.minecraft.server; - -import java.io.IOException; - -public class PacketPlayOutCollect implements Packet { - - private int a; - private int b; - private int c; - - public PacketPlayOutCollect() {} - - public PacketPlayOutCollect(int i, int j, int k) { - this.a = i; - this.b = j; - this.c = k; - } - - public void a(PacketDataSerializer packetdataserializer) throws IOException { - this.a = packetdataserializer.g(); - this.b = packetdataserializer.g(); - this.c = packetdataserializer.g(); - } - - public void b(PacketDataSerializer packetdataserializer) throws IOException { - packetdataserializer.d(this.a); - packetdataserializer.d(this.b); - packetdataserializer.d(this.c); - } - - public void a(PacketListenerPlayOut packetlistenerplayout) { - packetlistenerplayout.a(this); - } - // Akarin start - @Override - public boolean canDispatchImmediately() { - return true; - } - // Akarin end -} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutCombatEvent.java b/src/main/java/net/minecraft/server/PacketPlayOutCombatEvent.java deleted file mode 100644 index ce0f5ec22..000000000 --- a/src/main/java/net/minecraft/server/PacketPlayOutCombatEvent.java +++ /dev/null @@ -1,82 +0,0 @@ -package net.minecraft.server; - -import java.io.IOException; - -public class PacketPlayOutCombatEvent implements Packet { - - public PacketPlayOutCombatEvent.EnumCombatEventType a; - public int b; - public int c; - public int d; - public IChatBaseComponent e; - - public PacketPlayOutCombatEvent() {} - - public PacketPlayOutCombatEvent(CombatTracker combattracker, PacketPlayOutCombatEvent.EnumCombatEventType packetplayoutcombatevent_enumcombateventtype) { - this(combattracker, packetplayoutcombatevent_enumcombateventtype, new ChatComponentText("")); - } - - public PacketPlayOutCombatEvent(CombatTracker combattracker, PacketPlayOutCombatEvent.EnumCombatEventType packetplayoutcombatevent_enumcombateventtype, IChatBaseComponent ichatbasecomponent) { - this.a = packetplayoutcombatevent_enumcombateventtype; - EntityLiving entityliving = combattracker.c(); - - switch (packetplayoutcombatevent_enumcombateventtype) { - case END_COMBAT: - this.d = combattracker.f(); - this.c = entityliving == null ? -1 : entityliving.getId(); - break; - case ENTITY_DIED: - this.b = combattracker.h().getId(); - this.c = entityliving == null ? -1 : entityliving.getId(); - this.e = ichatbasecomponent; - } - - } - - public void a(PacketDataSerializer packetdataserializer) throws IOException { - this.a = (PacketPlayOutCombatEvent.EnumCombatEventType) packetdataserializer.a(PacketPlayOutCombatEvent.EnumCombatEventType.class); - if (this.a == PacketPlayOutCombatEvent.EnumCombatEventType.END_COMBAT) { - this.d = packetdataserializer.g(); - this.c = packetdataserializer.readInt(); - } else if (this.a == PacketPlayOutCombatEvent.EnumCombatEventType.ENTITY_DIED) { - this.b = packetdataserializer.g(); - this.c = packetdataserializer.readInt(); - this.e = packetdataserializer.f(); - } - - } - - public void b(PacketDataSerializer packetdataserializer) throws IOException { - packetdataserializer.a((Enum) this.a); - if (this.a == PacketPlayOutCombatEvent.EnumCombatEventType.END_COMBAT) { - packetdataserializer.d(this.d); - packetdataserializer.writeInt(this.c); - } else if (this.a == PacketPlayOutCombatEvent.EnumCombatEventType.ENTITY_DIED) { - packetdataserializer.d(this.b); - packetdataserializer.writeInt(this.c); - packetdataserializer.a(this.e); - } - - } - - public void a(PacketListenerPlayOut packetlistenerplayout) { - packetlistenerplayout.a(this); - } - - public boolean a() { - return this.a == PacketPlayOutCombatEvent.EnumCombatEventType.ENTITY_DIED; - } - - public static enum EnumCombatEventType { - - ENTER_COMBAT, END_COMBAT, ENTITY_DIED; - - private EnumCombatEventType() {} - } - // Akarin start - @Override - public boolean canDispatchImmediately() { - return true; - } - // Akarin end -} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutCommands.java b/src/main/java/net/minecraft/server/PacketPlayOutCommands.java deleted file mode 100644 index d7e147954..000000000 --- a/src/main/java/net/minecraft/server/PacketPlayOutCommands.java +++ /dev/null @@ -1,269 +0,0 @@ -package net.minecraft.server; - -import com.google.common.collect.Maps; -import com.mojang.brigadier.arguments.ArgumentType; -import com.mojang.brigadier.builder.ArgumentBuilder; -import com.mojang.brigadier.builder.LiteralArgumentBuilder; -import com.mojang.brigadier.builder.RequiredArgumentBuilder; -import com.mojang.brigadier.context.CommandContext; -import com.mojang.brigadier.tree.ArgumentCommandNode; -import com.mojang.brigadier.tree.CommandNode; -import com.mojang.brigadier.tree.LiteralCommandNode; -import com.mojang.brigadier.tree.RootCommandNode; -import java.io.IOException; -import java.util.ArrayDeque; -import java.util.Deque; -import java.util.Iterator; -import java.util.Map; -import java.util.Map.Entry; -import javax.annotation.Nullable; - -public class PacketPlayOutCommands implements Packet { - - private RootCommandNode a; - - public PacketPlayOutCommands() {} - - public PacketPlayOutCommands(RootCommandNode rootcommandnode) { - this.a = rootcommandnode; - } - - public void a(PacketDataSerializer packetdataserializer) throws IOException { - PacketPlayOutCommands.a[] apacketplayoutcommands_a = new PacketPlayOutCommands.a[packetdataserializer.g()]; - Deque deque = new ArrayDeque(apacketplayoutcommands_a.length); - - for (int i = 0; i < apacketplayoutcommands_a.length; ++i) { - apacketplayoutcommands_a[i] = this.c(packetdataserializer); - deque.add(apacketplayoutcommands_a[i]); - } - - boolean flag; - - do { - if (deque.isEmpty()) { - this.a = (RootCommandNode) apacketplayoutcommands_a[packetdataserializer.g()].e; - return; - } - - flag = false; - Iterator iterator = deque.iterator(); - - while (iterator.hasNext()) { - PacketPlayOutCommands.a packetplayoutcommands_a = (PacketPlayOutCommands.a) iterator.next(); - - if (packetplayoutcommands_a.a(apacketplayoutcommands_a)) { - iterator.remove(); - flag = true; - } - } - } while (flag); - - throw new IllegalStateException("Server sent an impossible command tree"); - } - - public void b(PacketDataSerializer packetdataserializer) throws IOException { - Map, Integer> map = Maps.newHashMap(); - Deque> deque = new ArrayDeque(); - - deque.add(this.a); - - while (!deque.isEmpty()) { - CommandNode commandnode = (CommandNode) deque.pollFirst(); - - if (!map.containsKey(commandnode)) { - int i = map.size(); - - map.put(commandnode, i); - deque.addAll(commandnode.getChildren()); - if (commandnode.getRedirect() != null) { - deque.add(commandnode.getRedirect()); - } - } - } - - CommandNode[] acommandnode = (CommandNode[]) (new CommandNode[map.size()]); - - Entry entry; - - for (Iterator iterator = map.entrySet().iterator(); iterator.hasNext(); acommandnode[(Integer) entry.getValue()] = (CommandNode) entry.getKey()) { - entry = (Entry) iterator.next(); - } - - packetdataserializer.d(acommandnode.length); - CommandNode[] acommandnode1 = acommandnode; - int j = acommandnode.length; - - for (int k = 0; k < j; ++k) { - CommandNode commandnode1 = acommandnode1[k]; - - this.a(packetdataserializer, commandnode1, map); - } - - packetdataserializer.d((Integer) map.get(this.a)); - } - - private PacketPlayOutCommands.a c(PacketDataSerializer packetdataserializer) { - byte b0 = packetdataserializer.readByte(); - int[] aint = packetdataserializer.b(); - int i = (b0 & 8) != 0 ? packetdataserializer.g() : 0; - ArgumentBuilder argumentbuilder = this.a(packetdataserializer, b0); - - return new PacketPlayOutCommands.a(argumentbuilder, b0, i, aint); - } - - @Nullable - private ArgumentBuilder a(PacketDataSerializer packetdataserializer, byte b0) { - int i = b0 & 3; - - if (i == 2) { - String s = packetdataserializer.e(32767); - ArgumentType argumenttype = ArgumentRegistry.a(packetdataserializer); - - if (argumenttype == null) { - return null; - } else { - RequiredArgumentBuilder requiredargumentbuilder = RequiredArgumentBuilder.argument(s, argumenttype); - - if ((b0 & 16) != 0) { - requiredargumentbuilder.suggests(CompletionProviders.a(packetdataserializer.l())); - } - - return requiredargumentbuilder; - } - } else { - return i == 1 ? LiteralArgumentBuilder.literal(packetdataserializer.e(32767)) : null; - } - } - - private void a(PacketDataSerializer packetdataserializer, CommandNode commandnode, Map, Integer> map) { - byte b0 = 0; - - if (commandnode.getRedirect() != null) { - b0 = (byte) (b0 | 8); - } - - if (commandnode.getCommand() != null) { - b0 = (byte) (b0 | 4); - } - - if (commandnode instanceof RootCommandNode) { - b0 = (byte) (b0 | 0); - } else if (commandnode instanceof ArgumentCommandNode) { - b0 = (byte) (b0 | 2); - if (((ArgumentCommandNode) commandnode).getCustomSuggestions() != null) { - b0 = (byte) (b0 | 16); - } - } else { - if (!(commandnode instanceof LiteralCommandNode)) { - throw new UnsupportedOperationException("Unknown node type " + commandnode); - } - - b0 = (byte) (b0 | 1); - } - - packetdataserializer.writeByte(b0); - packetdataserializer.d(commandnode.getChildren().size()); - Iterator iterator = commandnode.getChildren().iterator(); - - while (iterator.hasNext()) { - CommandNode commandnode1 = (CommandNode) iterator.next(); - - packetdataserializer.d((Integer) map.get(commandnode1)); - } - - if (commandnode.getRedirect() != null) { - packetdataserializer.d((Integer) map.get(commandnode.getRedirect())); - } - - if (commandnode instanceof ArgumentCommandNode) { - ArgumentCommandNode argumentcommandnode = (ArgumentCommandNode) commandnode; - - packetdataserializer.a(argumentcommandnode.getName()); - ArgumentRegistry.a(packetdataserializer, argumentcommandnode.getType()); - if (argumentcommandnode.getCustomSuggestions() != null) { - packetdataserializer.a(CompletionProviders.a(argumentcommandnode.getCustomSuggestions())); - } - } else if (commandnode instanceof LiteralCommandNode) { - packetdataserializer.a(((LiteralCommandNode) commandnode).getLiteral()); - } - - } - - public void a(PacketListenerPlayOut packetlistenerplayout) { - packetlistenerplayout.a(this); - } - - static class a { - - @Nullable - private final ArgumentBuilder a; - private final byte b; - private final int c; - private final int[] d; - private CommandNode e; - - private a(@Nullable ArgumentBuilder argumentbuilder, byte b0, int i, int[] aint) { - this.a = argumentbuilder; - this.b = b0; - this.c = i; - this.d = aint; - } - - public boolean a(PacketPlayOutCommands.a[] apacketplayoutcommands_a) { - if (this.e == null) { - if (this.a == null) { - this.e = new RootCommandNode(); - } else { - if ((this.b & 8) != 0) { - if (apacketplayoutcommands_a[this.c].e == null) { - return false; - } - - this.a.redirect(apacketplayoutcommands_a[this.c].e); - } - - if ((this.b & 4) != 0) { - this.a.executes((commandcontext) -> { - return 0; - }); - } - - this.e = this.a.build(); - } - } - - int[] aint = this.d; - int i = aint.length; - - int j; - int k; - - for (k = 0; k < i; ++k) { - j = aint[k]; - if (apacketplayoutcommands_a[j].e == null) { - return false; - } - } - - aint = this.d; - i = aint.length; - - for (k = 0; k < i; ++k) { - j = aint[k]; - CommandNode commandnode = apacketplayoutcommands_a[j].e; - - if (!(commandnode instanceof RootCommandNode)) { - this.e.addChild(commandnode); - } - } - - return true; - } - } - // Akarin start - @Override - public boolean canDispatchImmediately() { - return true; - } - // Akarin end -} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutEntity.java b/src/main/java/net/minecraft/server/PacketPlayOutEntity.java deleted file mode 100644 index a8029bf82..000000000 --- a/src/main/java/net/minecraft/server/PacketPlayOutEntity.java +++ /dev/null @@ -1,139 +0,0 @@ -package net.minecraft.server; - -import java.io.IOException; - -public class PacketPlayOutEntity implements Packet { - - protected int a; - protected int b; - protected int c; - protected int d; - protected byte e; - protected byte f; - protected boolean g; - protected boolean h; - - public PacketPlayOutEntity() {} - - public PacketPlayOutEntity(int i) { - this.a = i; - } - - public void a(PacketDataSerializer packetdataserializer) throws IOException { - this.a = packetdataserializer.g(); - } - - public void b(PacketDataSerializer packetdataserializer) throws IOException { - packetdataserializer.d(this.a); - } - - public void a(PacketListenerPlayOut packetlistenerplayout) { - packetlistenerplayout.a(this); - } - - public String toString() { - return "Entity_" + super.toString(); - } - - public static class PacketPlayOutEntityLook extends PacketPlayOutEntity { - - public PacketPlayOutEntityLook() { - this.h = true; - } - - public PacketPlayOutEntityLook(int i, byte b0, byte b1, boolean flag) { - super(i); - this.e = b0; - this.f = b1; - this.h = true; - this.g = flag; - } - - public void a(PacketDataSerializer packetdataserializer) throws IOException { - super.a(packetdataserializer); - this.e = packetdataserializer.readByte(); - this.f = packetdataserializer.readByte(); - this.g = packetdataserializer.readBoolean(); - } - - public void b(PacketDataSerializer packetdataserializer) throws IOException { - super.b(packetdataserializer); - packetdataserializer.writeByte(this.e); - packetdataserializer.writeByte(this.f); - packetdataserializer.writeBoolean(this.g); - } - } - - public static class PacketPlayOutRelEntityMove extends PacketPlayOutEntity { - - public PacketPlayOutRelEntityMove() {} - - public PacketPlayOutRelEntityMove(int i, long j, long k, long l, boolean flag) { - super(i); - this.b = (int) j; - this.c = (int) k; - this.d = (int) l; - this.g = flag; - } - - public void a(PacketDataSerializer packetdataserializer) throws IOException { - super.a(packetdataserializer); - this.b = packetdataserializer.readShort(); - this.c = packetdataserializer.readShort(); - this.d = packetdataserializer.readShort(); - this.g = packetdataserializer.readBoolean(); - } - - public void b(PacketDataSerializer packetdataserializer) throws IOException { - super.b(packetdataserializer); - packetdataserializer.writeShort(this.b); - packetdataserializer.writeShort(this.c); - packetdataserializer.writeShort(this.d); - packetdataserializer.writeBoolean(this.g); - } - } - - public static class PacketPlayOutRelEntityMoveLook extends PacketPlayOutEntity { - - public PacketPlayOutRelEntityMoveLook() { - this.h = true; - } - - public PacketPlayOutRelEntityMoveLook(int i, long j, long k, long l, byte b0, byte b1, boolean flag) { - super(i); - this.b = (int) j; - this.c = (int) k; - this.d = (int) l; - this.e = b0; - this.f = b1; - this.g = flag; - this.h = true; - } - - public void a(PacketDataSerializer packetdataserializer) throws IOException { - super.a(packetdataserializer); - this.b = packetdataserializer.readShort(); - this.c = packetdataserializer.readShort(); - this.d = packetdataserializer.readShort(); - this.e = packetdataserializer.readByte(); - this.f = packetdataserializer.readByte(); - this.g = packetdataserializer.readBoolean(); - } - - public void b(PacketDataSerializer packetdataserializer) throws IOException { - super.b(packetdataserializer); - packetdataserializer.writeShort(this.b); - packetdataserializer.writeShort(this.c); - packetdataserializer.writeShort(this.d); - packetdataserializer.writeByte(this.e); - packetdataserializer.writeByte(this.f); - packetdataserializer.writeBoolean(this.g); - } - } - // Akarin start - @Override - public boolean canDispatchImmediately() { - return true; - } - // Akarin end -} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutEntityTeleport.java b/src/main/java/net/minecraft/server/PacketPlayOutEntityTeleport.java deleted file mode 100644 index da83e4b1c..000000000 --- a/src/main/java/net/minecraft/server/PacketPlayOutEntityTeleport.java +++ /dev/null @@ -1,56 +0,0 @@ -package net.minecraft.server; - -import java.io.IOException; - -public class PacketPlayOutEntityTeleport implements Packet { - - private int a; - private double b; - private double c; - private double d; - private byte e; - private byte f; - private boolean g; - - public PacketPlayOutEntityTeleport() {} - - public PacketPlayOutEntityTeleport(Entity entity) { - this.a = entity.getId(); - this.b = entity.locX; - this.c = entity.locY; - this.d = entity.locZ; - this.e = (byte) ((int) (entity.yaw * 256.0F / 360.0F)); - this.f = (byte) ((int) (entity.pitch * 256.0F / 360.0F)); - this.g = entity.onGround; - } - - public void a(PacketDataSerializer packetdataserializer) throws IOException { - this.a = packetdataserializer.g(); - this.b = packetdataserializer.readDouble(); - this.c = packetdataserializer.readDouble(); - this.d = packetdataserializer.readDouble(); - this.e = packetdataserializer.readByte(); - this.f = packetdataserializer.readByte(); - this.g = packetdataserializer.readBoolean(); - } - - public void b(PacketDataSerializer packetdataserializer) throws IOException { - packetdataserializer.d(this.a); - packetdataserializer.writeDouble(this.b); - packetdataserializer.writeDouble(this.c); - packetdataserializer.writeDouble(this.d); - packetdataserializer.writeByte(this.e); - packetdataserializer.writeByte(this.f); - packetdataserializer.writeBoolean(this.g); - } - - public void a(PacketListenerPlayOut packetlistenerplayout) { - packetlistenerplayout.a(this); - } - // Akarin start - @Override - public boolean canDispatchImmediately() { - return true; - } - // Akarin end -} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java b/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java index 0cb15ca6b..f3d978248 100644 --- a/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java +++ b/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java @@ -209,7 +209,7 @@ public class PacketPlayOutMapChunk implements Packet { public io.akarin.server.core.PacketType getType() { return io.akarin.server.core.PacketType.PLAY_OUT_MAP_CHUNK; } - + @Override public boolean canDispatchImmediately() { return this.ready; diff --git a/src/main/java/net/minecraft/server/PacketPlayOutOpenWindow.java b/src/main/java/net/minecraft/server/PacketPlayOutOpenWindow.java deleted file mode 100644 index dcbacd91b..000000000 --- a/src/main/java/net/minecraft/server/PacketPlayOutOpenWindow.java +++ /dev/null @@ -1,62 +0,0 @@ -package net.minecraft.server; - -import java.io.IOException; - -public class PacketPlayOutOpenWindow implements Packet { - - private int a; - private String b; - private IChatBaseComponent c; - private int d; - private int e; - - public PacketPlayOutOpenWindow() {} - - public PacketPlayOutOpenWindow(int i, String s, IChatBaseComponent ichatbasecomponent) { - this(i, s, ichatbasecomponent, 0); - } - - public PacketPlayOutOpenWindow(int i, String s, IChatBaseComponent ichatbasecomponent, int j) { - this.a = i; - this.b = s; - this.c = ichatbasecomponent; - this.d = j; - } - - public PacketPlayOutOpenWindow(int i, String s, IChatBaseComponent ichatbasecomponent, int j, int k) { - this(i, s, ichatbasecomponent, j); - this.e = k; - } - - public void a(PacketListenerPlayOut packetlistenerplayout) { - packetlistenerplayout.a(this); - } - - public void a(PacketDataSerializer packetdataserializer) throws IOException { - this.a = packetdataserializer.readUnsignedByte(); - this.b = packetdataserializer.e(32); - this.c = packetdataserializer.f(); - this.d = packetdataserializer.readUnsignedByte(); - if (this.b.equals("EntityHorse")) { - this.e = packetdataserializer.readInt(); - } - - } - - public void b(PacketDataSerializer packetdataserializer) throws IOException { - packetdataserializer.writeByte(this.a); - packetdataserializer.a(this.b); - packetdataserializer.a(this.c); - packetdataserializer.writeByte(this.d); - if (this.b.equals("EntityHorse")) { - packetdataserializer.writeInt(this.e); - } - - } - // Akarin start - @Override - public boolean canDispatchImmediately() { - return true; - } - // Akarin end -} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutRespawn.java b/src/main/java/net/minecraft/server/PacketPlayOutRespawn.java deleted file mode 100644 index 33f3a9866..000000000 --- a/src/main/java/net/minecraft/server/PacketPlayOutRespawn.java +++ /dev/null @@ -1,48 +0,0 @@ -package net.minecraft.server; - -import java.io.IOException; - -public class PacketPlayOutRespawn implements Packet { - - private DimensionManager a; - private EnumDifficulty b; - private EnumGamemode c; - private WorldType d; - - public PacketPlayOutRespawn() {} - - public PacketPlayOutRespawn(DimensionManager dimensionmanager, EnumDifficulty enumdifficulty, WorldType worldtype, EnumGamemode enumgamemode) { - this.a = dimensionmanager; - this.b = enumdifficulty; - this.c = enumgamemode; - this.d = worldtype; - } - - public void a(PacketListenerPlayOut packetlistenerplayout) { - packetlistenerplayout.a(this); - } - - public void a(PacketDataSerializer packetdataserializer) throws IOException { - this.a = DimensionManager.a(packetdataserializer.readInt()); - this.b = EnumDifficulty.getById(packetdataserializer.readUnsignedByte()); - this.c = EnumGamemode.getById(packetdataserializer.readUnsignedByte()); - this.d = WorldType.getType(packetdataserializer.e(16)); - if (this.d == null) { - this.d = WorldType.NORMAL; - } - - } - - public void b(PacketDataSerializer packetdataserializer) throws IOException { - packetdataserializer.writeInt(this.a.getDimensionID()); - packetdataserializer.writeByte(this.b.a()); - packetdataserializer.writeByte(this.c.getId()); - packetdataserializer.a(this.d.name()); - } - // Akarin start - @Override - public boolean canDispatchImmediately() { - return true; - } - // Akarin end -} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutSpawnPosition.java b/src/main/java/net/minecraft/server/PacketPlayOutSpawnPosition.java index 7d9f27e38..133823480 100644 --- a/src/main/java/net/minecraft/server/PacketPlayOutSpawnPosition.java +++ b/src/main/java/net/minecraft/server/PacketPlayOutSpawnPosition.java @@ -28,10 +28,5 @@ public class PacketPlayOutSpawnPosition implements Packet public io.akarin.server.core.PacketType getType() { return io.akarin.server.core.PacketType.PLAY_OUT_SPAWN_POSITION; } - - @Override - public boolean canDispatchImmediately() { - return true; - } // Akarin end } diff --git a/src/main/java/net/minecraft/server/PacketPlayOutStatistic.java b/src/main/java/net/minecraft/server/PacketPlayOutStatistic.java deleted file mode 100644 index 2532c2f29..000000000 --- a/src/main/java/net/minecraft/server/PacketPlayOutStatistic.java +++ /dev/null @@ -1,65 +0,0 @@ -package net.minecraft.server; - -import it.unimi.dsi.fastutil.objects.Object2IntMap; -import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; -import it.unimi.dsi.fastutil.objects.ObjectIterator; -import it.unimi.dsi.fastutil.objects.Object2IntMap.Entry; -import java.io.IOException; - -public class PacketPlayOutStatistic implements Packet { - - private Object2IntMap> a; - - public PacketPlayOutStatistic() {} - - public PacketPlayOutStatistic(Object2IntMap> object2intmap) { - this.a = object2intmap; - } - - public void a(PacketListenerPlayOut packetlistenerplayout) { - packetlistenerplayout.a(this); - } - - public void a(PacketDataSerializer packetdataserializer) throws IOException { - int i = packetdataserializer.g(); - - this.a = new Object2IntOpenHashMap(i); - - for (int j = 0; j < i; ++j) { - this.a((StatisticWrapper) IRegistry.STATS.fromId(packetdataserializer.g()), packetdataserializer); - } - - } - - private void a(StatisticWrapper statisticwrapper, PacketDataSerializer packetdataserializer) { - int i = packetdataserializer.g(); - int j = packetdataserializer.g(); - - this.a.put(statisticwrapper.b(statisticwrapper.a().fromId(i)), j); - } - - public void b(PacketDataSerializer packetdataserializer) throws IOException { - packetdataserializer.d(this.a.size()); - ObjectIterator objectiterator = this.a.object2IntEntrySet().iterator(); - - while (objectiterator.hasNext()) { - Entry> entry = (Entry) objectiterator.next(); - Statistic statistic = (Statistic) entry.getKey(); - - packetdataserializer.d(IRegistry.STATS.a(statistic.a())); // Akarin - fixes decompile error - packetdataserializer.d(this.a(statistic)); - packetdataserializer.d(entry.getIntValue()); - } - - } - - private int a(Statistic statistic) { - return statistic.a().a().a(statistic.b()); - } - // Akarin start - @Override - public boolean canDispatchImmediately() { - return true; - } - // Akarin end -} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutTabComplete.java b/src/main/java/net/minecraft/server/PacketPlayOutTabComplete.java deleted file mode 100644 index 5d0c8c49d..000000000 --- a/src/main/java/net/minecraft/server/PacketPlayOutTabComplete.java +++ /dev/null @@ -1,69 +0,0 @@ -package net.minecraft.server; - -import com.google.common.collect.Lists; -import com.mojang.brigadier.context.StringRange; -import com.mojang.brigadier.suggestion.Suggestion; -import com.mojang.brigadier.suggestion.Suggestions; -import java.io.IOException; -import java.util.Iterator; -import java.util.List; - -public class PacketPlayOutTabComplete implements Packet { - - private int a; - private Suggestions b; - - public PacketPlayOutTabComplete() {} - - public PacketPlayOutTabComplete(int i, Suggestions suggestions) { - this.a = i; - this.b = suggestions; - } - - public void a(PacketDataSerializer packetdataserializer) throws IOException { - this.a = packetdataserializer.g(); - int i = packetdataserializer.g(); - int j = packetdataserializer.g(); - StringRange stringrange = StringRange.between(i, i + j); - int k = packetdataserializer.g(); - List list = Lists.newArrayListWithCapacity(k); - - for (int l = 0; l < k; ++l) { - String s = packetdataserializer.e(32767); - IChatBaseComponent ichatbasecomponent = packetdataserializer.readBoolean() ? packetdataserializer.f() : null; - - list.add(new Suggestion(stringrange, s, ichatbasecomponent)); - } - - this.b = new Suggestions(stringrange, list); - } - - public void b(PacketDataSerializer packetdataserializer) throws IOException { - packetdataserializer.d(this.a); - packetdataserializer.d(this.b.getRange().getStart()); - packetdataserializer.d(this.b.getRange().getLength()); - packetdataserializer.d(this.b.getList().size()); - Iterator iterator = this.b.getList().iterator(); - - while (iterator.hasNext()) { - Suggestion suggestion = (Suggestion) iterator.next(); - - packetdataserializer.a(suggestion.getText()); - packetdataserializer.writeBoolean(suggestion.getTooltip() != null); - if (suggestion.getTooltip() != null) { - packetdataserializer.a(ChatComponentUtils.a(suggestion.getTooltip())); - } - } - - } - - public void a(PacketListenerPlayOut packetlistenerplayout) { - packetlistenerplayout.a(this); - } - // Akarin start - @Override - public boolean canDispatchImmediately() { - return true; - } - // Akarin end -} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutVehicleMove.java b/src/main/java/net/minecraft/server/PacketPlayOutVehicleMove.java deleted file mode 100644 index abee06c7b..000000000 --- a/src/main/java/net/minecraft/server/PacketPlayOutVehicleMove.java +++ /dev/null @@ -1,48 +0,0 @@ -package net.minecraft.server; - -import java.io.IOException; - -public class PacketPlayOutVehicleMove implements Packet { - - private double a; - private double b; - private double c; - private float d; - private float e; - - public PacketPlayOutVehicleMove() {} - - public PacketPlayOutVehicleMove(Entity entity) { - this.a = entity.locX; - this.b = entity.locY; - this.c = entity.locZ; - this.d = entity.yaw; - this.e = entity.pitch; - } - - public void a(PacketDataSerializer packetdataserializer) throws IOException { - this.a = packetdataserializer.readDouble(); - this.b = packetdataserializer.readDouble(); - this.c = packetdataserializer.readDouble(); - this.d = packetdataserializer.readFloat(); - this.e = packetdataserializer.readFloat(); - } - - public void b(PacketDataSerializer packetdataserializer) throws IOException { - packetdataserializer.writeDouble(this.a); - packetdataserializer.writeDouble(this.b); - packetdataserializer.writeDouble(this.c); - packetdataserializer.writeFloat(this.d); - packetdataserializer.writeFloat(this.e); - } - - public void a(PacketListenerPlayOut packetlistenerplayout) { - packetlistenerplayout.a(this); - } - // Akarin start - @Override - public boolean canDispatchImmediately() { - return true; - } - // Akarin end -} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutWindowItems.java b/src/main/java/net/minecraft/server/PacketPlayOutWindowItems.java deleted file mode 100644 index 06fbba5b8..000000000 --- a/src/main/java/net/minecraft/server/PacketPlayOutWindowItems.java +++ /dev/null @@ -1,67 +0,0 @@ -package net.minecraft.server; - -import java.io.IOException; -import java.util.Iterator; -import java.util.List; - -public class PacketPlayOutWindowItems implements Packet { - - private int a; - private List b; - - //Paper start - @Override - public boolean packetTooLarge(NetworkManager manager) { - for (int i = 0 ; i < this.b.size() ; i++) { - manager.sendPacket(new PacketPlayOutSetSlot(this.a, i, this.b.get(i))); - } - return true; - } - // Paper end - public PacketPlayOutWindowItems() {} - - public PacketPlayOutWindowItems(int i, NonNullList nonnulllist) { - this.a = i; - this.b = NonNullList.a(nonnulllist.size(), ItemStack.a); - - for (int j = 0; j < this.b.size(); ++j) { - this.b.set(j, ((ItemStack) nonnulllist.get(j)).cloneItemStack()); - } - - } - - public void a(PacketDataSerializer packetdataserializer) throws IOException { - this.a = packetdataserializer.readUnsignedByte(); - short short0 = packetdataserializer.readShort(); - - this.b = NonNullList.a(short0, ItemStack.a); - - for (int i = 0; i < short0; ++i) { - this.b.set(i, packetdataserializer.k()); - } - - } - - public void b(PacketDataSerializer packetdataserializer) throws IOException { - packetdataserializer.writeByte(this.a); - packetdataserializer.writeShort(this.b.size()); - Iterator iterator = this.b.iterator(); - - while (iterator.hasNext()) { - ItemStack itemstack = (ItemStack) iterator.next(); - - packetdataserializer.a(itemstack); - } - - } - - public void a(PacketListenerPlayOut packetlistenerplayout) { - packetlistenerplayout.a(this); - } - // Akarin start - @Override - public boolean canDispatchImmediately() { - return true; - } - // Akarin end -} diff --git a/src/main/java/net/minecraft/server/PacketStatusOutPong.java b/src/main/java/net/minecraft/server/PacketStatusOutPong.java deleted file mode 100644 index 92dc95326..000000000 --- a/src/main/java/net/minecraft/server/PacketStatusOutPong.java +++ /dev/null @@ -1,37 +0,0 @@ -package net.minecraft.server; - -import java.io.IOException; - -public class PacketStatusOutPong implements Packet { - - private long a; - - public PacketStatusOutPong() {} - - public PacketStatusOutPong(long i) { - this.a = i; - } - - public void a(PacketDataSerializer packetdataserializer) throws IOException { - this.a = packetdataserializer.readLong(); - } - - public void b(PacketDataSerializer packetdataserializer) throws IOException { - packetdataserializer.writeLong(this.a); - } - - public void a(PacketStatusOutListener packetstatusoutlistener) { - packetstatusoutlistener.a(this); - } - // Akarin start - @Override - public io.akarin.server.core.PacketType getType() { - return io.akarin.server.core.PacketType.STATUS_OUT_PONG; - } - - @Override - public boolean canDispatchImmediately() { - return true; - } - // Akarin end -} diff --git a/src/main/java/net/minecraft/server/PacketStatusOutServerInfo.java b/src/main/java/net/minecraft/server/PacketStatusOutServerInfo.java deleted file mode 100644 index 86d47227d..000000000 --- a/src/main/java/net/minecraft/server/PacketStatusOutServerInfo.java +++ /dev/null @@ -1,40 +0,0 @@ -package net.minecraft.server; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import java.io.IOException; - -public class PacketStatusOutServerInfo implements Packet { - - private static final Gson a = (new GsonBuilder()).registerTypeAdapter(ServerPing.ServerData.class, new ServerPing.ServerData.Serializer()).registerTypeAdapter(ServerPing.ServerPingPlayerSample.class, new ServerPing.ServerPingPlayerSample.Serializer()).registerTypeAdapter(ServerPing.class, new ServerPing.Serializer()).registerTypeHierarchyAdapter(IChatBaseComponent.class, new IChatBaseComponent.ChatSerializer()).registerTypeHierarchyAdapter(ChatModifier.class, new ChatModifier.ChatModifierSerializer()).registerTypeAdapterFactory(new ChatTypeAdapterFactory()).create(); - private ServerPing b; - - public PacketStatusOutServerInfo() {} - - public PacketStatusOutServerInfo(ServerPing serverping) { - this.b = serverping; - } - - public void a(PacketDataSerializer packetdataserializer) throws IOException { - this.b = (ServerPing) ChatDeserializer.a(PacketStatusOutServerInfo.a, packetdataserializer.e(32767), ServerPing.class); - } - - public void b(PacketDataSerializer packetdataserializer) throws IOException { - packetdataserializer.a(PacketStatusOutServerInfo.a.toJson(this.b)); - } - - public void a(PacketStatusOutListener packetstatusoutlistener) { - packetstatusoutlistener.a(this); - } - // Akarin start - @Override - public io.akarin.server.core.PacketType getType() { - return io.akarin.server.core.PacketType.STATUS_OUT_SERVER_INFO; - } - - @Override - public boolean canDispatchImmediately() { - return true; - } - // Akarin end -} diff --git a/work/Paper b/work/Paper index ea855e2b4..e50b4f608 160000 --- a/work/Paper +++ b/work/Paper @@ -1 +1 @@ -Subproject commit ea855e2b46277fab767ec62248a57e5aa5c6e7a8 +Subproject commit e50b4f608d040306479064294c11d1759fea4769