mirror of
https://github.com/dmulloy2/ProtocolLib.git
synced 2024-11-28 05:35:28 +01:00
Split API off into a separate module
This commit is contained in:
parent
a042c8bb3c
commit
b4c0cc5a27
@ -2,8 +2,8 @@ language: java
|
|||||||
jdk:
|
jdk:
|
||||||
- oraclejdk8
|
- oraclejdk8
|
||||||
- oraclejdk7
|
- oraclejdk7
|
||||||
script: mvn clean test -U
|
script: mvn clean test
|
||||||
before_install: cd ProtocolLib
|
#before_install: cd ProtocolLib
|
||||||
install: true
|
install: true
|
||||||
notifications:
|
notifications:
|
||||||
email:
|
email:
|
||||||
|
167
ProtocolLib/.gitignore
vendored
167
ProtocolLib/.gitignore
vendored
@ -1,167 +0,0 @@
|
|||||||
#################
|
|
||||||
## Eclipse
|
|
||||||
#################
|
|
||||||
|
|
||||||
*.pydevproject
|
|
||||||
.project
|
|
||||||
.metadata
|
|
||||||
bin/
|
|
||||||
tmp/
|
|
||||||
*.tmp
|
|
||||||
*.bak
|
|
||||||
*.swp
|
|
||||||
*~.nib
|
|
||||||
local.properties
|
|
||||||
.classpath
|
|
||||||
.settings/
|
|
||||||
.loadpath
|
|
||||||
target/
|
|
||||||
.gitignore
|
|
||||||
|
|
||||||
# External tool builders
|
|
||||||
.externalToolBuilders/
|
|
||||||
|
|
||||||
# Locally stored "Eclipse launch configurations"
|
|
||||||
*.launch
|
|
||||||
|
|
||||||
# CDT-specific
|
|
||||||
.cproject
|
|
||||||
|
|
||||||
# PDT-specific
|
|
||||||
.buildpath
|
|
||||||
|
|
||||||
|
|
||||||
#################
|
|
||||||
## Visual Studio
|
|
||||||
#################
|
|
||||||
|
|
||||||
## Ignore Visual Studio temporary files, build results, and
|
|
||||||
## files generated by popular Visual Studio add-ons.
|
|
||||||
|
|
||||||
# User-specific files
|
|
||||||
*.suo
|
|
||||||
*.user
|
|
||||||
*.sln.docstates
|
|
||||||
|
|
||||||
# Build results
|
|
||||||
[Dd]ebug/
|
|
||||||
[Rr]elease/
|
|
||||||
*_i.c
|
|
||||||
*_p.c
|
|
||||||
*.ilk
|
|
||||||
*.meta
|
|
||||||
*.obj
|
|
||||||
*.pch
|
|
||||||
*.pdb
|
|
||||||
*.pgc
|
|
||||||
*.pgd
|
|
||||||
*.rsp
|
|
||||||
*.sbr
|
|
||||||
*.tlb
|
|
||||||
*.tli
|
|
||||||
*.tlh
|
|
||||||
*.tmp
|
|
||||||
*.vspscc
|
|
||||||
.builds
|
|
||||||
*.dotCover
|
|
||||||
|
|
||||||
## TODO: If you have NuGet Package Restore enabled, uncomment this
|
|
||||||
#packages/
|
|
||||||
|
|
||||||
# Visual C++ cache files
|
|
||||||
ipch/
|
|
||||||
*.aps
|
|
||||||
*.ncb
|
|
||||||
*.opensdf
|
|
||||||
*.sdf
|
|
||||||
|
|
||||||
# Visual Studio profiler
|
|
||||||
*.psess
|
|
||||||
*.vsp
|
|
||||||
|
|
||||||
# ReSharper is a .NET coding add-in
|
|
||||||
_ReSharper*
|
|
||||||
|
|
||||||
# Installshield output folder
|
|
||||||
[Ee]xpress
|
|
||||||
|
|
||||||
# DocProject is a documentation generator add-in
|
|
||||||
DocProject/buildhelp/
|
|
||||||
DocProject/Help/*.HxT
|
|
||||||
DocProject/Help/*.HxC
|
|
||||||
DocProject/Help/*.hhc
|
|
||||||
DocProject/Help/*.hhk
|
|
||||||
DocProject/Help/*.hhp
|
|
||||||
DocProject/Help/Html2
|
|
||||||
DocProject/Help/html
|
|
||||||
|
|
||||||
# Click-Once directory
|
|
||||||
publish
|
|
||||||
|
|
||||||
# Others
|
|
||||||
[Bb]in
|
|
||||||
[Oo]bj
|
|
||||||
sql
|
|
||||||
TestResults
|
|
||||||
*.Cache
|
|
||||||
ClientBin
|
|
||||||
stylecop.*
|
|
||||||
~$*
|
|
||||||
*.dbmdl
|
|
||||||
Generated_Code #added for RIA/Silverlight projects
|
|
||||||
|
|
||||||
# Backup & report files from converting an old project file to a newer
|
|
||||||
# Visual Studio version. Backup files are not needed, because we have git ;-)
|
|
||||||
_UpgradeReport_Files/
|
|
||||||
Backup*/
|
|
||||||
UpgradeLog*.XML
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
############
|
|
||||||
## Windows
|
|
||||||
############
|
|
||||||
|
|
||||||
# Windows image file caches
|
|
||||||
Thumbs.db
|
|
||||||
|
|
||||||
# Folder config file
|
|
||||||
Desktop.ini
|
|
||||||
|
|
||||||
|
|
||||||
#############
|
|
||||||
## Python
|
|
||||||
#############
|
|
||||||
|
|
||||||
*.py[co]
|
|
||||||
|
|
||||||
# Packages
|
|
||||||
*.egg
|
|
||||||
*.egg-info
|
|
||||||
dist
|
|
||||||
build
|
|
||||||
eggs
|
|
||||||
parts
|
|
||||||
bin
|
|
||||||
var
|
|
||||||
sdist
|
|
||||||
develop-eggs
|
|
||||||
.installed.cfg
|
|
||||||
|
|
||||||
# Installer logs
|
|
||||||
pip-log.txt
|
|
||||||
|
|
||||||
# Unit test / coverage reports
|
|
||||||
.coverage
|
|
||||||
.tox
|
|
||||||
|
|
||||||
#Translations
|
|
||||||
*.mo
|
|
||||||
|
|
||||||
#Mr Developer
|
|
||||||
.mr.developer.cfg
|
|
||||||
|
|
||||||
# Mac crap
|
|
||||||
.DS_Store
|
|
||||||
/target
|
|
||||||
/target
|
|
@ -1,67 +0,0 @@
|
|||||||
/**
|
|
||||||
* ProtocolLib - Bukkit server library that allows access to the Minecraft protocol.
|
|
||||||
* Copyright (C) 2015 dmulloy2
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it under the terms of the
|
|
||||||
* GNU General Public License as published by the Free Software Foundation; either version 2 of
|
|
||||||
* the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
||||||
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
* See the GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along with this program;
|
|
||||||
* if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
|
||||||
* 02111-1307 USA
|
|
||||||
*/
|
|
||||||
package com.comphenix.protocol.compat.guava;
|
|
||||||
|
|
||||||
import java.io.DataInputStream;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.logging.Level;
|
|
||||||
|
|
||||||
import com.comphenix.protocol.PacketType;
|
|
||||||
import com.comphenix.protocol.ProtocolLibrary;
|
|
||||||
import com.google.common.collect.Range;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author dmulloy2
|
|
||||||
*/
|
|
||||||
|
|
||||||
public class Guava {
|
|
||||||
private static GuavaCompat compat;
|
|
||||||
|
|
||||||
static {
|
|
||||||
try {
|
|
||||||
Range.closed(1, 2);
|
|
||||||
compat = new Guava17();
|
|
||||||
} catch (Throwable ex) {
|
|
||||||
try {
|
|
||||||
Class<?> clazz = Class.forName("com.comphenix.protocol.compat.guava.Guava10");
|
|
||||||
compat = (GuavaCompat) clazz.newInstance();
|
|
||||||
} catch (Throwable ex1) {
|
|
||||||
ProtocolLibrary.log(Level.SEVERE, "Failed to create Guava 10 compat:", ex1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static GuavaCompat getCompat() {
|
|
||||||
return compat;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static <C extends Comparable<C>> Range<C> closedRange(C lower, C upper) {
|
|
||||||
return getCompat().closedRange(lower, upper);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static <C extends Comparable<C>> Range<C> singleton(C singleton) {
|
|
||||||
return getCompat().singletonRange(singleton);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Set<Integer> toSet(Range<Integer> range) {
|
|
||||||
return getCompat().toSet(range);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static DataInputStream addHeader(DataInputStream input, PacketType type) {
|
|
||||||
return getCompat().addHeader(input, type);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,76 +0,0 @@
|
|||||||
/**
|
|
||||||
* ProtocolLib - Bukkit server library that allows access to the Minecraft protocol.
|
|
||||||
* Copyright (C) 2015 dmulloy2
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it under the terms of the
|
|
||||||
* GNU General Public License as published by the Free Software Foundation; either version 2 of
|
|
||||||
* the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
||||||
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
* See the GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along with this program;
|
|
||||||
* if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
|
||||||
* 02111-1307 USA
|
|
||||||
*/
|
|
||||||
package com.comphenix.protocol.compat.guava;
|
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
|
||||||
import java.io.DataInputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import com.comphenix.protocol.PacketType;
|
|
||||||
import com.google.common.collect.ContiguousSet;
|
|
||||||
import com.google.common.collect.DiscreteDomain;
|
|
||||||
import com.google.common.collect.Range;
|
|
||||||
import com.google.common.io.ByteSource;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author dmulloy2
|
|
||||||
*/
|
|
||||||
|
|
||||||
public class Guava17 implements GuavaCompat {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public <C extends Comparable<C>> Range<C> closedRange(C lower, C upper) {
|
|
||||||
return Range.closed(lower, upper);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public <C extends Comparable<C>> Range<C> singletonRange(C singleton) {
|
|
||||||
return Range.singleton(singleton);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<Integer> toSet(Range<Integer> range) {
|
|
||||||
return ContiguousSet.create(range, DiscreteDomain.integers());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public DataInputStream addHeader(final DataInputStream input, final PacketType type) {
|
|
||||||
ByteSource header = new ByteSource() {
|
|
||||||
@Override
|
|
||||||
public InputStream openStream() throws IOException {
|
|
||||||
byte[] data = new byte[] { (byte) type.getLegacyId() };
|
|
||||||
return new ByteArrayInputStream(data);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ByteSource data = new ByteSource() {
|
|
||||||
@Override
|
|
||||||
public InputStream openStream() throws IOException {
|
|
||||||
return input;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Combine them into a single stream
|
|
||||||
try {
|
|
||||||
return new DataInputStream(ByteSource.concat(header, data).openStream());
|
|
||||||
} catch (IOException e) {
|
|
||||||
throw new RuntimeException("Cannot add header.", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,38 +0,0 @@
|
|||||||
/**
|
|
||||||
* ProtocolLib - Bukkit server library that allows access to the Minecraft protocol.
|
|
||||||
* Copyright (C) 2015 dmulloy2
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it under the terms of the
|
|
||||||
* GNU General Public License as published by the Free Software Foundation; either version 2 of
|
|
||||||
* the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
||||||
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
* See the GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along with this program;
|
|
||||||
* if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
|
||||||
* 02111-1307 USA
|
|
||||||
*/
|
|
||||||
package com.comphenix.protocol.compat.guava;
|
|
||||||
|
|
||||||
import java.io.DataInputStream;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import com.comphenix.protocol.PacketType;
|
|
||||||
import com.google.common.collect.Range;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author dmulloy2
|
|
||||||
*/
|
|
||||||
|
|
||||||
public interface GuavaCompat {
|
|
||||||
|
|
||||||
<C extends Comparable<C>> Range<C> closedRange(C lower, C upper);
|
|
||||||
|
|
||||||
<C extends Comparable<C>> Range<C> singletonRange(C singleton);
|
|
||||||
|
|
||||||
Set<Integer> toSet(Range<Integer> range);
|
|
||||||
|
|
||||||
DataInputStream addHeader(DataInputStream input, PacketType type);
|
|
||||||
}
|
|
@ -1,28 +0,0 @@
|
|||||||
/**
|
|
||||||
* ProtocolLib - Bukkit server library that allows access to the Minecraft protocol.
|
|
||||||
* Copyright (C) 2015 dmulloy2
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it under the terms of the
|
|
||||||
* GNU General Public License as published by the Free Software Foundation; either version 2 of
|
|
||||||
* the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
||||||
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
* See the GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along with this program;
|
|
||||||
* if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
|
||||||
* 02111-1307 USA
|
|
||||||
*/
|
|
||||||
package com.comphenix.protocol.compat.netty;
|
|
||||||
|
|
||||||
import com.comphenix.protocol.injector.netty.Injector;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author dmulloy2
|
|
||||||
*/
|
|
||||||
|
|
||||||
public interface ChannelInjector extends Injector {
|
|
||||||
|
|
||||||
WrappedChannel getChannel();
|
|
||||||
}
|
|
@ -1,103 +0,0 @@
|
|||||||
/**
|
|
||||||
* ProtocolLib - Bukkit server library that allows access to the Minecraft protocol.
|
|
||||||
* Copyright (C) 2015 dmulloy2
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it under the terms of the
|
|
||||||
* GNU General Public License as published by the Free Software Foundation; either version 2 of
|
|
||||||
* the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
||||||
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
* See the GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along with this program;
|
|
||||||
* if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
|
||||||
* 02111-1307 USA
|
|
||||||
*/
|
|
||||||
package com.comphenix.protocol.compat.netty;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Map.Entry;
|
|
||||||
|
|
||||||
import com.comphenix.protocol.PacketType;
|
|
||||||
import com.comphenix.protocol.PacketType.Protocol;
|
|
||||||
import com.comphenix.protocol.PacketType.Sender;
|
|
||||||
import com.comphenix.protocol.injector.netty.ProtocolRegistry;
|
|
||||||
import com.comphenix.protocol.injector.packet.MapContainer;
|
|
||||||
import com.comphenix.protocol.reflect.StructureModifier;
|
|
||||||
import com.google.common.collect.Iterables;
|
|
||||||
import com.google.common.collect.Lists;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author dmulloy2
|
|
||||||
*/
|
|
||||||
|
|
||||||
public class LegacyProtocolRegistry extends ProtocolRegistry {
|
|
||||||
|
|
||||||
public LegacyProtocolRegistry() {
|
|
||||||
super();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void initialize() {
|
|
||||||
final Object[] protocols = enumProtocol.getEnumConstants();
|
|
||||||
List<Map<Integer, Class<?>>> serverMaps = Lists.newArrayList();
|
|
||||||
List<Map<Integer, Class<?>>> clientMaps = Lists.newArrayList();
|
|
||||||
StructureModifier<Object> modifier = null;
|
|
||||||
|
|
||||||
// Result
|
|
||||||
Register result = new Register();
|
|
||||||
|
|
||||||
for (Object protocol : protocols) {
|
|
||||||
if (modifier == null)
|
|
||||||
modifier = new StructureModifier<Object>(protocol.getClass().getSuperclass(), false);
|
|
||||||
StructureModifier<Map<Integer, Class<?>>> maps = modifier.withTarget(protocol).withType(Map.class);
|
|
||||||
|
|
||||||
serverMaps.add(maps.read(0));
|
|
||||||
clientMaps.add(maps.read(1));
|
|
||||||
}
|
|
||||||
// Maps we have to occationally check have changed
|
|
||||||
for (Map<Integer, Class<?>> map : Iterables.concat(serverMaps, clientMaps)) {
|
|
||||||
result.containers.add(new MapContainer(map));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Heuristic - there are more server packets than client packets
|
|
||||||
if (sum(clientMaps) > sum(serverMaps)) {
|
|
||||||
// Swap if this is violated
|
|
||||||
List<Map<Integer, Class<?>>> temp = serverMaps;
|
|
||||||
serverMaps = clientMaps;
|
|
||||||
clientMaps = temp;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < protocols.length; i++) {
|
|
||||||
Enum<?> enumProtocol = (Enum<?>) protocols[i];
|
|
||||||
Protocol equivalent = Protocol.fromVanilla(enumProtocol);
|
|
||||||
|
|
||||||
// Associate known types
|
|
||||||
associatePackets(result, serverMaps.get(i), equivalent, Sender.SERVER);
|
|
||||||
associatePackets(result, clientMaps.get(i), equivalent, Sender.CLIENT);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Exchange (thread safe, as we have only one writer)
|
|
||||||
this.register = result;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void associatePackets(Register register, Map<Integer, Class<?>> lookup, Protocol protocol, Sender sender) {
|
|
||||||
for (Entry<Integer, Class<?>> entry : lookup.entrySet()) {
|
|
||||||
PacketType type = PacketType.fromID(protocol, sender, entry.getKey(), entry.getValue());
|
|
||||||
|
|
||||||
try {
|
|
||||||
register.typeToClass.put(type, entry.getValue());
|
|
||||||
|
|
||||||
if (sender == Sender.SERVER)
|
|
||||||
register.serverPackets.add(type);
|
|
||||||
if (sender == Sender.CLIENT)
|
|
||||||
register.clientPackets.add(type);
|
|
||||||
} catch (IllegalArgumentException ex) {
|
|
||||||
// Sometimes this happens with fake packets, just ignore it
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,99 +0,0 @@
|
|||||||
/**
|
|
||||||
* ProtocolLib - Bukkit server library that allows access to the Minecraft protocol.
|
|
||||||
* Copyright (C) 2015 dmulloy2
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it under the terms of the
|
|
||||||
* GNU General Public License as published by the Free Software Foundation; either version 2 of
|
|
||||||
* the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
||||||
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
* See the GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along with this program;
|
|
||||||
* if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
|
||||||
* 02111-1307 USA
|
|
||||||
*/
|
|
||||||
package com.comphenix.protocol.compat.netty;
|
|
||||||
|
|
||||||
import java.io.DataInputStream;
|
|
||||||
import java.io.DataOutputStream;
|
|
||||||
import java.util.logging.Level;
|
|
||||||
|
|
||||||
import org.bukkit.plugin.Plugin;
|
|
||||||
|
|
||||||
import com.comphenix.protocol.ProtocolLibrary;
|
|
||||||
import com.comphenix.protocol.compat.netty.independent.IndependentNetty;
|
|
||||||
import com.comphenix.protocol.error.ErrorReporter;
|
|
||||||
import com.comphenix.protocol.injector.PacketFilterManager;
|
|
||||||
import com.comphenix.protocol.wrappers.WrappedServerPing.CompressedImage;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author dmulloy2
|
|
||||||
*/
|
|
||||||
|
|
||||||
public class Netty {
|
|
||||||
private static NettyCompat compat;
|
|
||||||
|
|
||||||
static {
|
|
||||||
try {
|
|
||||||
Class.forName("io.netty.buffer.ByteBuf");
|
|
||||||
compat = new IndependentNetty();
|
|
||||||
} catch (ClassNotFoundException ex) {
|
|
||||||
try {
|
|
||||||
Class<?> clazz = Class.forName("com.comphenix.protocol.compat.netty.shaded.ShadedNetty");
|
|
||||||
compat = (NettyCompat) clazz.newInstance();
|
|
||||||
} catch (Exception ex1) {
|
|
||||||
ProtocolLibrary.log(Level.SEVERE, "Failed to create legacy netty compat:", ex1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static NettyCompat getCompat() {
|
|
||||||
return compat;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isIndependent() {
|
|
||||||
return compat instanceof IndependentNetty;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static WrappedByteBuf createPacketBuffer() {
|
|
||||||
return getCompat().createPacketBuffer();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Class<?> getGenericFutureListenerArray() {
|
|
||||||
return getCompat().getGenericFutureListenerArray();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Class<?> getChannelHandlerContext() {
|
|
||||||
return getCompat().getChannelHandlerContext();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String toEncodedText(CompressedImage image) {
|
|
||||||
return getCompat().toEncodedText(image);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static WrappedByteBuf decode(byte[] encoded) {
|
|
||||||
return getCompat().decode(encoded);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ProtocolInjector getProtocolInjector(Plugin library, PacketFilterManager packetFilterManager, ErrorReporter reporter) {
|
|
||||||
return getCompat().getProtocolInjector(library, packetFilterManager, reporter);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static WrappedByteBuf packetReader(DataInputStream input) {
|
|
||||||
return getCompat().packetReader(input);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static WrappedByteBuf packetWriter(DataOutputStream output) {
|
|
||||||
return getCompat().packetWriter(output);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static WrappedByteBuf copiedBuffer(byte[] array) {
|
|
||||||
return getCompat().copiedBuffer(array);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static WrappedByteBuf buffer() {
|
|
||||||
return getCompat().buffer();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,55 +0,0 @@
|
|||||||
/**
|
|
||||||
* ProtocolLib - Bukkit server library that allows access to the Minecraft protocol.
|
|
||||||
* Copyright (C) 2015 dmulloy2
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it under the terms of the
|
|
||||||
* GNU General Public License as published by the Free Software Foundation; either version 2 of
|
|
||||||
* the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
||||||
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
* See the GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along with this program;
|
|
||||||
* if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
|
||||||
* 02111-1307 USA
|
|
||||||
*/
|
|
||||||
package com.comphenix.protocol.compat.netty;
|
|
||||||
|
|
||||||
import java.io.DataInputStream;
|
|
||||||
import java.io.DataOutputStream;
|
|
||||||
|
|
||||||
import org.bukkit.plugin.Plugin;
|
|
||||||
|
|
||||||
import com.comphenix.protocol.error.ErrorReporter;
|
|
||||||
import com.comphenix.protocol.injector.ListenerInvoker;
|
|
||||||
import com.comphenix.protocol.wrappers.WrappedServerPing.CompressedImage;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author dmulloy2
|
|
||||||
*/
|
|
||||||
|
|
||||||
// TODO: Sort out packet readers/writers
|
|
||||||
public interface NettyCompat {
|
|
||||||
|
|
||||||
WrappedByteBuf createPacketBuffer();
|
|
||||||
|
|
||||||
WrappedByteBuf copiedBuffer(byte[] array);
|
|
||||||
|
|
||||||
WrappedByteBuf buffer();
|
|
||||||
|
|
||||||
Class<?> getGenericFutureListenerArray();
|
|
||||||
|
|
||||||
Class<?> getChannelHandlerContext();
|
|
||||||
|
|
||||||
String toEncodedText(CompressedImage image);
|
|
||||||
|
|
||||||
WrappedByteBuf decode(byte[] encoded);
|
|
||||||
|
|
||||||
ProtocolInjector getProtocolInjector(Plugin plugin, ListenerInvoker invoker, ErrorReporter reporter);
|
|
||||||
|
|
||||||
WrappedByteBuf packetReader(DataInputStream input);
|
|
||||||
|
|
||||||
WrappedByteBuf packetWriter(DataOutputStream output);
|
|
||||||
}
|
|
@ -1,38 +0,0 @@
|
|||||||
/**
|
|
||||||
* ProtocolLib - Bukkit server library that allows access to the Minecraft protocol.
|
|
||||||
* Copyright (C) 2015 dmulloy2
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it under the terms of the
|
|
||||||
* GNU General Public License as published by the Free Software Foundation; either version 2 of
|
|
||||||
* the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
||||||
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
* See the GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along with this program;
|
|
||||||
* if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
|
||||||
* 02111-1307 USA
|
|
||||||
*/
|
|
||||||
package com.comphenix.protocol.compat.netty;
|
|
||||||
|
|
||||||
import com.comphenix.protocol.injector.netty.ChannelListener;
|
|
||||||
import com.comphenix.protocol.injector.packet.PacketInjector;
|
|
||||||
import com.comphenix.protocol.injector.player.PlayerInjectionHandler;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author dmulloy2
|
|
||||||
*/
|
|
||||||
|
|
||||||
public interface ProtocolInjector extends ChannelListener {
|
|
||||||
|
|
||||||
PlayerInjectionHandler getPlayerInjector();
|
|
||||||
|
|
||||||
PacketInjector getPacketInjector();
|
|
||||||
|
|
||||||
void setDebug(boolean debug);
|
|
||||||
|
|
||||||
void inject();
|
|
||||||
|
|
||||||
void close();
|
|
||||||
}
|
|
@ -1,46 +0,0 @@
|
|||||||
/**
|
|
||||||
* ProtocolLib - Bukkit server library that allows access to the Minecraft protocol.
|
|
||||||
* Copyright (C) 2015 dmulloy2
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it under the terms of the
|
|
||||||
* GNU General Public License as published by the Free Software Foundation; either version 2 of
|
|
||||||
* the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
||||||
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
* See the GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along with this program;
|
|
||||||
* if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
|
||||||
* 02111-1307 USA
|
|
||||||
*/
|
|
||||||
package com.comphenix.protocol.compat.netty;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.ObjectInputStream;
|
|
||||||
import java.io.ObjectOutputStream;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author dmulloy2
|
|
||||||
*/
|
|
||||||
|
|
||||||
public interface WrappedByteBuf {
|
|
||||||
|
|
||||||
void writeBytes(ObjectInputStream input, int id) throws IOException;
|
|
||||||
|
|
||||||
Object getHandle();
|
|
||||||
|
|
||||||
int readableBytes();
|
|
||||||
|
|
||||||
void readBytes(ObjectOutputStream output, int readableBytes) throws IOException;
|
|
||||||
|
|
||||||
void readBytes(byte[] data);
|
|
||||||
|
|
||||||
void writeByte(byte b);
|
|
||||||
|
|
||||||
void writeByte(int i);
|
|
||||||
|
|
||||||
void writeBytes(byte[] bytes);
|
|
||||||
|
|
||||||
byte[] array();
|
|
||||||
}
|
|
@ -1,26 +0,0 @@
|
|||||||
/**
|
|
||||||
* ProtocolLib - Bukkit server library that allows access to the Minecraft protocol.
|
|
||||||
* Copyright (C) 2015 dmulloy2
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it under the terms of the
|
|
||||||
* GNU General Public License as published by the Free Software Foundation; either version 2 of
|
|
||||||
* the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
||||||
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
* See the GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along with this program;
|
|
||||||
* if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
|
||||||
* 02111-1307 USA
|
|
||||||
*/
|
|
||||||
package com.comphenix.protocol.compat.netty;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author dmulloy2
|
|
||||||
*/
|
|
||||||
|
|
||||||
public interface WrappedChannel {
|
|
||||||
|
|
||||||
void writeAndFlush(Object packet);
|
|
||||||
}
|
|
@ -1,105 +0,0 @@
|
|||||||
/**
|
|
||||||
* ProtocolLib - Bukkit server library that allows access to the Minecraft protocol.
|
|
||||||
* Copyright (C) 2015 dmulloy2
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it under the terms of the
|
|
||||||
* GNU General Public License as published by the Free Software Foundation; either version 2 of
|
|
||||||
* the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
||||||
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
* See the GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along with this program;
|
|
||||||
* if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
|
||||||
* 02111-1307 USA
|
|
||||||
*/
|
|
||||||
package com.comphenix.protocol.compat.netty.independent;
|
|
||||||
|
|
||||||
import io.netty.buffer.ByteBuf;
|
|
||||||
import io.netty.buffer.Unpooled;
|
|
||||||
import io.netty.buffer.UnpooledByteBufAllocator;
|
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
|
||||||
import io.netty.handler.codec.base64.Base64;
|
|
||||||
import io.netty.util.concurrent.GenericFutureListener;
|
|
||||||
|
|
||||||
import java.io.DataInputStream;
|
|
||||||
import java.io.DataOutputStream;
|
|
||||||
|
|
||||||
import org.bukkit.plugin.Plugin;
|
|
||||||
|
|
||||||
import com.comphenix.protocol.compat.netty.NettyCompat;
|
|
||||||
import com.comphenix.protocol.compat.netty.ProtocolInjector;
|
|
||||||
import com.comphenix.protocol.compat.netty.WrappedByteBuf;
|
|
||||||
import com.comphenix.protocol.error.ErrorReporter;
|
|
||||||
import com.comphenix.protocol.injector.ListenerInvoker;
|
|
||||||
import com.comphenix.protocol.utility.MinecraftReflection;
|
|
||||||
import com.comphenix.protocol.wrappers.WrappedServerPing.CompressedImage;
|
|
||||||
import com.google.common.base.Charsets;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author dmulloy2
|
|
||||||
*/
|
|
||||||
|
|
||||||
public class IndependentNetty implements NettyCompat {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public WrappedByteBuf createPacketBuffer() {
|
|
||||||
ByteBuf buffer = UnpooledByteBufAllocator.DEFAULT.buffer();
|
|
||||||
Class<?> packetSerializer = MinecraftReflection.getPacketDataSerializerClass();
|
|
||||||
|
|
||||||
try {
|
|
||||||
return new NettyByteBuf((ByteBuf) packetSerializer.getConstructor(ByteBuf.class).newInstance(buffer));
|
|
||||||
} catch (Exception e) {
|
|
||||||
throw new RuntimeException("Cannot construct packet serializer.", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Class<?> getGenericFutureListenerArray() {
|
|
||||||
return GenericFutureListener[].class;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Class<?> getChannelHandlerContext() {
|
|
||||||
return ChannelHandlerContext.class;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toEncodedText(CompressedImage image) {
|
|
||||||
final ByteBuf buffer = Unpooled.wrappedBuffer(image.getDataCopy());
|
|
||||||
String computed = "data:" + image.getMime() + ";base64," +
|
|
||||||
Base64.encode(buffer).toString(Charsets.UTF_8);
|
|
||||||
return computed;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public WrappedByteBuf decode(byte[] encoded) {
|
|
||||||
return new NettyByteBuf(Base64.decode(Unpooled.wrappedBuffer(encoded)));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ProtocolInjector getProtocolInjector(Plugin plugin, ListenerInvoker invoker, ErrorReporter reporter) {
|
|
||||||
return new NettyProtocolInjector(plugin, invoker, reporter);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public WrappedByteBuf packetReader(DataInputStream input) {
|
|
||||||
return new NettyByteBuf(NettyByteBufAdapter.packetReader(input));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public WrappedByteBuf packetWriter(DataOutputStream output) {
|
|
||||||
return new NettyByteBuf(NettyByteBufAdapter.packetWriter(output));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public WrappedByteBuf copiedBuffer(byte[] array) {
|
|
||||||
return new NettyByteBuf(Unpooled.copiedBuffer(array));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public WrappedByteBuf buffer() {
|
|
||||||
return new NettyByteBuf(Unpooled.buffer());
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,83 +0,0 @@
|
|||||||
/**
|
|
||||||
* ProtocolLib - Bukkit server library that allows access to the Minecraft protocol.
|
|
||||||
* Copyright (C) 2015 dmulloy2
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it under the terms of the
|
|
||||||
* GNU General Public License as published by the Free Software Foundation; either version 2 of
|
|
||||||
* the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
||||||
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
* See the GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along with this program;
|
|
||||||
* if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
|
||||||
* 02111-1307 USA
|
|
||||||
*/
|
|
||||||
package com.comphenix.protocol.compat.netty.independent;
|
|
||||||
|
|
||||||
import io.netty.buffer.ByteBuf;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.ObjectInputStream;
|
|
||||||
import java.io.ObjectOutputStream;
|
|
||||||
import java.lang.ref.WeakReference;
|
|
||||||
|
|
||||||
import com.comphenix.protocol.compat.netty.WrappedByteBuf;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author dmulloy2
|
|
||||||
*/
|
|
||||||
|
|
||||||
public class NettyByteBuf implements WrappedByteBuf {
|
|
||||||
private WeakReference<ByteBuf> handle;
|
|
||||||
|
|
||||||
public NettyByteBuf(ByteBuf handle) {
|
|
||||||
this.handle = new WeakReference<ByteBuf>(handle);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void writeBytes(ObjectInputStream input, int id) throws IOException {
|
|
||||||
handle.get().writeBytes(input, id);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Object getHandle() {
|
|
||||||
return handle.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int readableBytes() {
|
|
||||||
return handle.get().readableBytes();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void readBytes(ObjectOutputStream output, int readableBytes) throws IOException {
|
|
||||||
handle.get().readBytes(output, readableBytes);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void readBytes(byte[] data) {
|
|
||||||
handle.get().readBytes(data);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void writeByte(byte b) {
|
|
||||||
handle.get().writeByte(b);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void writeByte(int i) {
|
|
||||||
handle.get().writeByte(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void writeBytes(byte[] bytes) {
|
|
||||||
handle.get().writeBytes(bytes);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public byte[] array() {
|
|
||||||
return handle.get().array();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,38 +0,0 @@
|
|||||||
/**
|
|
||||||
* ProtocolLib - Bukkit server library that allows access to the Minecraft protocol.
|
|
||||||
* Copyright (C) 2015 dmulloy2
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it under the terms of the
|
|
||||||
* GNU General Public License as published by the Free Software Foundation; either version 2 of
|
|
||||||
* the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
||||||
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
* See the GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along with this program;
|
|
||||||
* if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
|
||||||
* 02111-1307 USA
|
|
||||||
*/
|
|
||||||
package com.comphenix.protocol.compat.netty.independent;
|
|
||||||
|
|
||||||
import io.netty.channel.Channel;
|
|
||||||
|
|
||||||
import com.comphenix.protocol.compat.netty.WrappedChannel;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author dmulloy2
|
|
||||||
*/
|
|
||||||
|
|
||||||
public class NettyChannel implements WrappedChannel {
|
|
||||||
private final Channel channel;
|
|
||||||
|
|
||||||
public NettyChannel(Channel channel) {
|
|
||||||
this.channel = channel;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void writeAndFlush(Object packet) {
|
|
||||||
channel.writeAndFlush(packet);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,9 +1,9 @@
|
|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>ProtocolLib-v1_7_R4</artifactId>
|
<artifactId>ProtocolLib-API</artifactId>
|
||||||
<name>ProtocolLib-v1_7_R4</name>
|
<name>ProtocolLib-API</name>
|
||||||
<version>3.7.0-SNAPSHOT</version>
|
<version>4.0-SNAPSHOT</version>
|
||||||
|
|
||||||
<description>Provides read/write access to the Minecraft protocol.</description>
|
<description>Provides read/write access to the Minecraft protocol.</description>
|
||||||
<url>http://www.spigotmc.org/resources/protocollib.1997/</url>
|
<url>http://www.spigotmc.org/resources/protocollib.1997/</url>
|
||||||
@ -12,7 +12,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>com.comphenix.protocol</groupId>
|
<groupId>com.comphenix.protocol</groupId>
|
||||||
<artifactId>ProtocolLib-Parent</artifactId>
|
<artifactId>ProtocolLib-Parent</artifactId>
|
||||||
<version>v3-SNAPSHOT</version>
|
<version>v4-SNAPSHOT</version>
|
||||||
<relativePath>../../</relativePath>
|
<relativePath>../../</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@ -21,13 +21,6 @@
|
|||||||
<project.build.number></project.build.number>
|
<project.build.number></project.build.number>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<repositories>
|
|
||||||
<repository>
|
|
||||||
<id>md_5-repo</id>
|
|
||||||
<url>http://repo.md-5.net/content/groups/public/</url>
|
|
||||||
</repository>
|
|
||||||
</repositories>
|
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
<defaultGoal>clean install</defaultGoal>
|
<defaultGoal>clean install</defaultGoal>
|
||||||
<sourceDirectory>src/main/java</sourceDirectory>
|
<sourceDirectory>src/main/java</sourceDirectory>
|
||||||
@ -43,39 +36,6 @@
|
|||||||
</resources>
|
</resources>
|
||||||
|
|
||||||
<plugins>
|
<plugins>
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-shade-plugin</artifactId>
|
|
||||||
<version>2.4.3</version>
|
|
||||||
<executions>
|
|
||||||
<execution>
|
|
||||||
<phase>package</phase>
|
|
||||||
<goals>
|
|
||||||
<goal>shade</goal>
|
|
||||||
</goals>
|
|
||||||
<configuration>
|
|
||||||
<shadedArtifactAttached>false</shadedArtifactAttached>
|
|
||||||
<createDependencyReducedPom>false</createDependencyReducedPom>
|
|
||||||
|
|
||||||
<relocations>
|
|
||||||
<relocation>
|
|
||||||
<pattern>net.sf</pattern>
|
|
||||||
<shadedPattern>com.comphenix.net.sf</shadedPattern>
|
|
||||||
</relocation>
|
|
||||||
</relocations>
|
|
||||||
|
|
||||||
<artifactSet>
|
|
||||||
<excludes>
|
|
||||||
<exclude>org.spigotmc:spigot</exclude>
|
|
||||||
<exclude>org.spigotmc:spigot-api</exclude>
|
|
||||||
<exclude>junit:junit</exclude>
|
|
||||||
</excludes>
|
|
||||||
</artifactSet>
|
|
||||||
</configuration>
|
|
||||||
</execution>
|
|
||||||
</executions>
|
|
||||||
</plugin>
|
|
||||||
|
|
||||||
<plugin>
|
<plugin>
|
||||||
<artifactId>maven-compiler-plugin</artifactId>
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
<version>3.5.1</version>
|
<version>3.5.1</version>
|
||||||
@ -99,40 +59,24 @@
|
|||||||
</manifestEntries>
|
</manifestEntries>
|
||||||
</archive>
|
</archive>
|
||||||
<finalName>ProtocolLib</finalName>
|
<finalName>ProtocolLib</finalName>
|
||||||
<outputDirectory>../../target/</outputDirectory>
|
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
|
|
||||||
<plugin>
|
<plugin>
|
||||||
<artifactId>maven-javadoc-plugin</artifactId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<version>2.10.3</version>
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
<executions>
|
<version>2.10</version>
|
||||||
<execution>
|
|
||||||
<phase>package</phase>
|
|
||||||
<id>attach-javadocs</id>
|
|
||||||
</execution>
|
|
||||||
</executions>
|
|
||||||
<configuration>
|
<configuration>
|
||||||
<skip>true</skip>
|
<systemProperties>
|
||||||
</configuration>
|
<property>
|
||||||
</plugin>
|
<name>projectVersion</name>
|
||||||
|
<value>${project.version}</value>
|
||||||
</plugins>
|
</property>
|
||||||
</build>
|
</systemProperties>
|
||||||
|
|
||||||
<reporting>
|
|
||||||
<plugins>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.codehaus.mojo</groupId>
|
|
||||||
<artifactId>findbugs-maven-plugin</artifactId>
|
|
||||||
<version>2.5.2</version>
|
|
||||||
<configuration>
|
|
||||||
<threshold>High</threshold>
|
|
||||||
<effort>Default</effort>
|
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
</reporting>
|
</build>
|
||||||
|
|
||||||
<profiles>
|
<profiles>
|
||||||
<profile>
|
<profile>
|
||||||
@ -242,23 +186,25 @@
|
|||||||
</developers>
|
</developers>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
<!-- Included with Minecraft
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.netty</groupId>
|
||||||
|
<artifactId>netty-all</artifactId>
|
||||||
|
<version>4.0.23.Final</version>
|
||||||
|
</dependency>
|
||||||
|
-->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.spigotmc</groupId>
|
<groupId>org.spigotmc</groupId>
|
||||||
<artifactId>spigot-api</artifactId>
|
<artifactId>spigot-api</artifactId>
|
||||||
<version>1.7.10-R0.1-SNAPSHOT</version>
|
<version>1.9-R0.1-SNAPSHOT</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.spigotmc</groupId>
|
<groupId>org.spigotmc</groupId>
|
||||||
<artifactId>spigot</artifactId>
|
<artifactId>spigot</artifactId>
|
||||||
<version>1.7.10-R0.1-SNAPSHOT</version>
|
<version>1.9-R0.1-SNAPSHOT</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>com.comphenix.protocol</groupId>
|
|
||||||
<artifactId>ProtocolLib</artifactId>
|
|
||||||
<version>${project.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>cglib</groupId>
|
<groupId>cglib</groupId>
|
||||||
<artifactId>cglib-nodep</artifactId>
|
<artifactId>cglib-nodep</artifactId>
|
||||||
@ -271,5 +217,29 @@
|
|||||||
<version>1.1-SNAPSHOT</version>
|
<version>1.1-SNAPSHOT</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>junit</groupId>
|
||||||
|
<artifactId>junit</artifactId>
|
||||||
|
<version>4.10</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.mockito</groupId>
|
||||||
|
<artifactId>mockito-all</artifactId>
|
||||||
|
<version>1.8.4</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.powermock</groupId>
|
||||||
|
<artifactId>powermock-module-junit4</artifactId>
|
||||||
|
<version>1.5</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.powermock</groupId>
|
||||||
|
<artifactId>powermock-api-mockito</artifactId>
|
||||||
|
<version>1.5</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
@ -844,7 +844,7 @@ public class PacketType implements Serializable, Comparable<PacketType> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Execute in the main thread if possible
|
// Execute in the main thread if possible
|
||||||
if (Bukkit.getServer() == null || Application.isPrimaryThread()) {
|
if (Bukkit.getServer() == null || Bukkit.isPrimaryThread()) {
|
||||||
try {
|
try {
|
||||||
return Futures.immediateFuture(callable.call());
|
return Futures.immediateFuture(callable.call());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
@ -17,10 +17,6 @@
|
|||||||
|
|
||||||
package com.comphenix.protocol;
|
package com.comphenix.protocol;
|
||||||
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import com.comphenix.protocol.injector.PacketFilterManager;
|
|
||||||
import com.comphenix.protocol.reflect.FieldAccessException;
|
|
||||||
import com.comphenix.protocol.reflect.IntEnum;
|
import com.comphenix.protocol.reflect.IntEnum;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -166,29 +162,6 @@ public final class Packets {
|
|||||||
return INSTANCE;
|
return INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Determine if the given packet is a valid server packet in the current version of Minecraft.
|
|
||||||
* <p>
|
|
||||||
* Use {@link PacketType#isSupported()} instead.
|
|
||||||
* @param packetID - the packet to test.
|
|
||||||
* @return TRUE if this packet is supported, FALSE otherwise.
|
|
||||||
* @throws FieldAccessException If we're unable to retrieve the server packet data from Minecraft.
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
public static boolean isSupported(int packetID) throws FieldAccessException {
|
|
||||||
return PacketFilterManager.getServerPackets().contains(packetID);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieve every client packet the current version of Minecraft is aware of.
|
|
||||||
* @return Every supported server packet.
|
|
||||||
* @throws FieldAccessException If we're unable to retrieve the server packet data from Minecraft.
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
public static Set<Integer> getSupported() throws FieldAccessException {
|
|
||||||
return PacketFilterManager.getServerPackets();
|
|
||||||
}
|
|
||||||
|
|
||||||
// We only allow a single instance of this class
|
// We only allow a single instance of this class
|
||||||
private Server() {
|
private Server() {
|
||||||
super();
|
super();
|
||||||
@ -263,25 +236,6 @@ public final class Packets {
|
|||||||
return INSTANCE;
|
return INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Determine if the given packet is a valid client packet in the current version of Minecraft.
|
|
||||||
* @param packetID - the packet to test.
|
|
||||||
* @return TRUE if this packet is supported, FALSE otherwise.
|
|
||||||
* @throws FieldAccessException If we're unable to retrieve the client packet data from Minecraft.
|
|
||||||
*/
|
|
||||||
public static boolean isSupported(int packetID) throws FieldAccessException {
|
|
||||||
return PacketFilterManager.getClientPackets().contains(packetID);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieve every client packet the current version of Minecraft is aware of.
|
|
||||||
* @return Every supported client packet.
|
|
||||||
* @throws FieldAccessException If we're unable to retrieve the client packet data from Minecraft.
|
|
||||||
*/
|
|
||||||
public static Set<Integer> getSupported() throws FieldAccessException {
|
|
||||||
return PacketFilterManager.getClientPackets();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Like above
|
// Like above
|
||||||
private Client() {
|
private Client() {
|
||||||
super();
|
super();
|
@ -25,7 +25,7 @@ import org.bukkit.configuration.Configuration;
|
|||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
import com.comphenix.protocol.injector.PacketFilterManager.PlayerInjectHooks;
|
import com.comphenix.protocol.injector.PlayerInjectHooks;
|
||||||
import com.google.common.base.Charsets;
|
import com.google.common.base.Charsets;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
@ -0,0 +1,96 @@
|
|||||||
|
package com.comphenix.protocol;
|
||||||
|
|
||||||
|
import java.text.MessageFormat;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
|
import com.comphenix.protocol.error.BasicErrorReporter;
|
||||||
|
import com.comphenix.protocol.error.ErrorReporter;
|
||||||
|
import com.google.common.util.concurrent.ListeningScheduledExecutorService;
|
||||||
|
|
||||||
|
public class ProtocolLibrary {
|
||||||
|
public static final long MILLI_PER_SECOND = 1000;
|
||||||
|
public static final List<String> INCOMPATIBLE = Arrays.asList("TagAPI");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The minimum version ProtocolLib has been tested with.
|
||||||
|
*/
|
||||||
|
public static final String MINIMUM_MINECRAFT_VERSION = "1.9";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The maximum version ProtocolLib has been tested with,
|
||||||
|
*/
|
||||||
|
public static final String MAXIMUM_MINECRAFT_VERSION = "1.9";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The date (with ISO 8601 or YYYY-MM-DD) when the most recent version (1.9) was released.
|
||||||
|
*/
|
||||||
|
public static final String MINECRAFT_LAST_RELEASE_DATE = "2016-02-29";
|
||||||
|
|
||||||
|
private static Plugin plugin;
|
||||||
|
private static ProtocolConfig config;
|
||||||
|
private static ProtocolManager manager;
|
||||||
|
private static ErrorReporter reporter = new BasicErrorReporter();
|
||||||
|
|
||||||
|
private static ListeningScheduledExecutorService executorAsync;
|
||||||
|
private static ListeningScheduledExecutorService executorSync;
|
||||||
|
|
||||||
|
private static boolean updatesDisabled;
|
||||||
|
|
||||||
|
protected static void init(Plugin plugin, ProtocolConfig config, ProtocolManager manager, ErrorReporter reporter,
|
||||||
|
ListeningScheduledExecutorService executorAsync, ListeningScheduledExecutorService executorSync) {
|
||||||
|
ProtocolLibrary.plugin = plugin;
|
||||||
|
ProtocolLibrary.config = config;
|
||||||
|
ProtocolLibrary.manager = manager;
|
||||||
|
ProtocolLibrary.reporter = reporter;
|
||||||
|
ProtocolLibrary.executorAsync = executorAsync;
|
||||||
|
ProtocolLibrary.executorSync = executorSync;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Plugin getPlugin() {
|
||||||
|
return plugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ProtocolConfig getConfig() {
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ProtocolManager getProtocolManager() {
|
||||||
|
return manager;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ErrorReporter getErrorReporter() {
|
||||||
|
return reporter;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void disableUpdates() {
|
||||||
|
updatesDisabled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean updatesDisabled() {
|
||||||
|
return updatesDisabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ListeningScheduledExecutorService getExecutorAsync() {
|
||||||
|
return executorAsync;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ListeningScheduledExecutorService getExecutorSync() {
|
||||||
|
return executorSync;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void log(Level level, String message, Object... args) {
|
||||||
|
plugin.getLogger().log(level, MessageFormat.format(message, args));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void log(String message, Object... args) {
|
||||||
|
log(Level.INFO, message, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void log(Level level, String message, Throwable ex) {
|
||||||
|
plugin.getLogger().log(level, message, ex);
|
||||||
|
}
|
||||||
|
}
|
@ -29,6 +29,7 @@ import org.bukkit.plugin.Plugin;
|
|||||||
|
|
||||||
import com.comphenix.protocol.async.AsyncMarker;
|
import com.comphenix.protocol.async.AsyncMarker;
|
||||||
import com.comphenix.protocol.events.ListenerPriority;
|
import com.comphenix.protocol.events.ListenerPriority;
|
||||||
|
import com.comphenix.protocol.events.ListeningWhitelist;
|
||||||
import com.comphenix.protocol.events.PacketContainer;
|
import com.comphenix.protocol.events.PacketContainer;
|
||||||
import com.comphenix.protocol.events.PacketListener;
|
import com.comphenix.protocol.events.PacketListener;
|
||||||
import com.comphenix.protocol.injector.PacketConstructor;
|
import com.comphenix.protocol.injector.PacketConstructor;
|
||||||
@ -279,4 +280,6 @@ public interface ProtocolManager extends PacketStream {
|
|||||||
* @return Asynchronous packet manager.
|
* @return Asynchronous packet manager.
|
||||||
*/
|
*/
|
||||||
public AsynchronousManager getAsynchronousManager();
|
public AsynchronousManager getAsynchronousManager();
|
||||||
|
|
||||||
|
public void verifyWhitelist(PacketListener listener, ListeningWhitelist whitelist);
|
||||||
}
|
}
|
@ -35,7 +35,6 @@ import com.comphenix.protocol.error.ErrorReporter;
|
|||||||
import com.comphenix.protocol.events.ListeningWhitelist;
|
import com.comphenix.protocol.events.ListeningWhitelist;
|
||||||
import com.comphenix.protocol.events.PacketEvent;
|
import com.comphenix.protocol.events.PacketEvent;
|
||||||
import com.comphenix.protocol.events.PacketListener;
|
import com.comphenix.protocol.events.PacketListener;
|
||||||
import com.comphenix.protocol.injector.PacketFilterManager;
|
|
||||||
import com.comphenix.protocol.injector.PrioritizedListener;
|
import com.comphenix.protocol.injector.PrioritizedListener;
|
||||||
import com.comphenix.protocol.injector.SortedPacketListenerList;
|
import com.comphenix.protocol.injector.SortedPacketListenerList;
|
||||||
import com.comphenix.protocol.injector.packet.PacketRegistry;
|
import com.comphenix.protocol.injector.packet.PacketRegistry;
|
||||||
@ -181,11 +180,11 @@ public class AsyncFilterManager implements AsynchronousManager {
|
|||||||
|
|
||||||
// Add listener to either or both processing queue
|
// Add listener to either or both processing queue
|
||||||
if (hasValidWhitelist(sendingWhitelist)) {
|
if (hasValidWhitelist(sendingWhitelist)) {
|
||||||
PacketFilterManager.verifyWhitelist(listener, sendingWhitelist);
|
manager.verifyWhitelist(listener, sendingWhitelist);
|
||||||
serverProcessingQueue.addListener(handler, sendingWhitelist);
|
serverProcessingQueue.addListener(handler, sendingWhitelist);
|
||||||
}
|
}
|
||||||
if (hasValidWhitelist(receivingWhitelist)) {
|
if (hasValidWhitelist(receivingWhitelist)) {
|
||||||
PacketFilterManager.verifyWhitelist(listener, receivingWhitelist);
|
manager.verifyWhitelist(listener, receivingWhitelist);
|
||||||
clientProcessingQueue.addListener(handler, receivingWhitelist);
|
clientProcessingQueue.addListener(handler, receivingWhitelist);
|
||||||
}
|
}
|
||||||
|
|
@ -23,7 +23,6 @@ import java.util.NavigableMap;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.TreeMap;
|
import java.util.TreeMap;
|
||||||
|
|
||||||
import com.comphenix.protocol.compat.guava.Guava;
|
|
||||||
import com.google.common.base.Objects;
|
import com.google.common.base.Objects;
|
||||||
import com.google.common.collect.Range;
|
import com.google.common.collect.Range;
|
||||||
|
|
||||||
@ -68,7 +67,7 @@ public abstract class AbstractIntervalTree<TKey extends Comparable<TKey>, TValue
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Range<TKey> getKey() {
|
public Range<TKey> getKey() {
|
||||||
return Guava.closedRange(left.key, right.key);
|
return Range.closed(left.key, right.key);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
@ -2,6 +2,7 @@ package com.comphenix.protocol.events;
|
|||||||
|
|
||||||
import com.comphenix.protocol.injector.GamePhase;
|
import com.comphenix.protocol.injector.GamePhase;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents additional options a listener may require.
|
* Represents additional options a listener may require.
|
||||||
*
|
*
|
@ -17,6 +17,9 @@
|
|||||||
|
|
||||||
package com.comphenix.protocol.events;
|
package com.comphenix.protocol.events;
|
||||||
|
|
||||||
|
import io.netty.buffer.ByteBuf;
|
||||||
|
import io.netty.buffer.UnpooledByteBufAllocator;
|
||||||
|
|
||||||
import java.io.DataInput;
|
import java.io.DataInput;
|
||||||
import java.io.DataInputStream;
|
import java.io.DataInputStream;
|
||||||
import java.io.DataOutput;
|
import java.io.DataOutput;
|
||||||
@ -47,8 +50,6 @@ import org.bukkit.util.Vector;
|
|||||||
|
|
||||||
import com.comphenix.protocol.PacketType;
|
import com.comphenix.protocol.PacketType;
|
||||||
import com.comphenix.protocol.PacketType.Protocol;
|
import com.comphenix.protocol.PacketType.Protocol;
|
||||||
import com.comphenix.protocol.compat.netty.Netty;
|
|
||||||
import com.comphenix.protocol.compat.netty.WrappedByteBuf;
|
|
||||||
import com.comphenix.protocol.injector.StructureCache;
|
import com.comphenix.protocol.injector.StructureCache;
|
||||||
import com.comphenix.protocol.reflect.EquivalentConverter;
|
import com.comphenix.protocol.reflect.EquivalentConverter;
|
||||||
import com.comphenix.protocol.reflect.FuzzyReflection;
|
import com.comphenix.protocol.reflect.FuzzyReflection;
|
||||||
@ -930,8 +931,8 @@ public class PacketContainer implements Serializable {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
if (MinecraftReflection.isUsingNetty()) {
|
if (MinecraftReflection.isUsingNetty()) {
|
||||||
WrappedByteBuf buffer = createPacketBuffer();
|
ByteBuf buffer = createPacketBuffer();
|
||||||
MinecraftMethods.getPacketWriteByteBufMethod().invoke(handle, buffer.getHandle());
|
MinecraftMethods.getPacketWriteByteBufMethod().invoke(handle, buffer);
|
||||||
|
|
||||||
output.writeInt(buffer.readableBytes());
|
output.writeInt(buffer.readableBytes());
|
||||||
buffer.readBytes(output, buffer.readableBytes());
|
buffer.readBytes(output, buffer.readableBytes());
|
||||||
@ -967,10 +968,10 @@ public class PacketContainer implements Serializable {
|
|||||||
// Call the read method
|
// Call the read method
|
||||||
try {
|
try {
|
||||||
if (MinecraftReflection.isUsingNetty()) {
|
if (MinecraftReflection.isUsingNetty()) {
|
||||||
WrappedByteBuf buffer = createPacketBuffer();
|
ByteBuf buffer = createPacketBuffer();
|
||||||
buffer.writeBytes(input, input.readInt());
|
buffer.writeBytes(input, input.readInt());
|
||||||
|
|
||||||
MinecraftMethods.getPacketReadByteBufMethod().invoke(handle, buffer.getHandle());
|
MinecraftMethods.getPacketReadByteBufMethod().invoke(handle, buffer);
|
||||||
} else {
|
} else {
|
||||||
if (input.readInt() != -1)
|
if (input.readInt() != -1)
|
||||||
throw new IllegalArgumentException("Cannot load a packet from 1.7.2 in 1.6.4.");
|
throw new IllegalArgumentException("Cannot load a packet from 1.7.2 in 1.6.4.");
|
||||||
@ -995,8 +996,15 @@ public class PacketContainer implements Serializable {
|
|||||||
* Construct a new packet data serializer.
|
* Construct a new packet data serializer.
|
||||||
* @return The packet data serializer.
|
* @return The packet data serializer.
|
||||||
*/
|
*/
|
||||||
private WrappedByteBuf createPacketBuffer() {
|
private ByteBuf createPacketBuffer() {
|
||||||
return Netty.createPacketBuffer();
|
ByteBuf buffer = UnpooledByteBufAllocator.DEFAULT.buffer();
|
||||||
|
Class<?> packetSerializer = MinecraftReflection.getPacketDataSerializerClass();
|
||||||
|
|
||||||
|
try {
|
||||||
|
return (ByteBuf) packetSerializer.getConstructor(ByteBuf.class).newInstance(buffer);
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException("Cannot construct packet serializer.", e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---- Metadata
|
// ---- Metadata
|
@ -23,10 +23,10 @@ import java.io.ObjectOutputStream;
|
|||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
import java.util.EventObject;
|
import java.util.EventObject;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.Cancellable;
|
import org.bukkit.event.Cancellable;
|
||||||
|
|
||||||
import com.comphenix.protocol.Application;
|
|
||||||
import com.comphenix.protocol.PacketType;
|
import com.comphenix.protocol.PacketType;
|
||||||
import com.comphenix.protocol.ProtocolLibrary;
|
import com.comphenix.protocol.ProtocolLibrary;
|
||||||
import com.comphenix.protocol.async.AsyncMarker;
|
import com.comphenix.protocol.async.AsyncMarker;
|
||||||
@ -202,7 +202,7 @@ public class PacketEvent extends EventObject implements Cancellable {
|
|||||||
* @return TRUE if we are, FALSE otherwise.
|
* @return TRUE if we are, FALSE otherwise.
|
||||||
*/
|
*/
|
||||||
public boolean isAsync() {
|
public boolean isAsync() {
|
||||||
return !Application.isPrimaryThread();
|
return !Bukkit.isPrimaryThread();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
@ -0,0 +1,31 @@
|
|||||||
|
package com.comphenix.protocol.injector;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the inject hook type. Different types allow for maximum compatibility.
|
||||||
|
* @author Kristian
|
||||||
|
*/
|
||||||
|
public enum PlayerInjectHooks {
|
||||||
|
/**
|
||||||
|
* The injection hook that does nothing. Set when every other inject hook fails.
|
||||||
|
*/
|
||||||
|
NONE,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Override the network handler object itself. Only works in 1.3.
|
||||||
|
* <p>
|
||||||
|
* Cannot intercept MapChunk packets.
|
||||||
|
*/
|
||||||
|
NETWORK_MANAGER_OBJECT,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Override the packet queue lists in NetworkHandler.
|
||||||
|
* <p>
|
||||||
|
* Cannot intercept MapChunk packets.
|
||||||
|
*/
|
||||||
|
NETWORK_HANDLER_FIELDS,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Override the server handler object. Versatile, but a tad slower.
|
||||||
|
*/
|
||||||
|
NETWORK_SERVER_OBJECT;
|
||||||
|
}
|
@ -14,7 +14,7 @@
|
|||||||
* if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
* if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
* 02111-1307 USA
|
* 02111-1307 USA
|
||||||
*/
|
*/
|
||||||
package com.comphenix.protocol.compat.netty.independent;
|
package com.comphenix.protocol.injector.netty;
|
||||||
|
|
||||||
import io.netty.buffer.AbstractByteBuf;
|
import io.netty.buffer.AbstractByteBuf;
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
@ -14,7 +14,7 @@
|
|||||||
* if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
* if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
* 02111-1307 USA
|
* 02111-1307 USA
|
||||||
*/
|
*/
|
||||||
package com.comphenix.protocol.compat.netty.independent;
|
package com.comphenix.protocol.injector.netty;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
@ -16,7 +16,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.comphenix.protocol.injector.netty;
|
package com.comphenix.protocol.injector.netty;
|
||||||
|
|
||||||
import com.comphenix.protocol.compat.netty.WrappedByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author dmulloy2
|
* @author dmulloy2
|
||||||
@ -39,7 +39,7 @@ public class WirePacket {
|
|||||||
return bytes;
|
return bytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeId(WrappedByteBuf output) {
|
public void writeId(ByteBuf output) {
|
||||||
int i = id;
|
int i = id;
|
||||||
while ((i & -128) != 0) {
|
while ((i & -128) != 0) {
|
||||||
output.writeByte(i & 127 | 128);
|
output.writeByte(i & 127 | 128);
|
||||||
@ -49,7 +49,7 @@ public class WirePacket {
|
|||||||
output.writeByte(i);
|
output.writeByte(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeBytes(WrappedByteBuf output) {
|
public void writeBytes(ByteBuf output) {
|
||||||
output.writeBytes(bytes);
|
output.writeBytes(bytes);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -24,17 +24,10 @@ import java.util.Set;
|
|||||||
|
|
||||||
import com.comphenix.protocol.PacketType;
|
import com.comphenix.protocol.PacketType;
|
||||||
import com.comphenix.protocol.PacketType.Sender;
|
import com.comphenix.protocol.PacketType.Sender;
|
||||||
import com.comphenix.protocol.ProtocolLibrary;
|
|
||||||
import com.comphenix.protocol.compat.netty.LegacyProtocolRegistry;
|
|
||||||
import com.comphenix.protocol.compat.netty.independent.NettyProtocolRegistry;
|
|
||||||
import com.comphenix.protocol.error.Report;
|
|
||||||
import com.comphenix.protocol.error.ReportType;
|
import com.comphenix.protocol.error.ReportType;
|
||||||
|
import com.comphenix.protocol.injector.netty.NettyProtocolRegistry;
|
||||||
import com.comphenix.protocol.injector.netty.ProtocolRegistry;
|
import com.comphenix.protocol.injector.netty.ProtocolRegistry;
|
||||||
import com.comphenix.protocol.injector.packet.LegacyPacketRegistry.InsufficientPacketsException;
|
|
||||||
import com.comphenix.protocol.reflect.FieldAccessException;
|
import com.comphenix.protocol.reflect.FieldAccessException;
|
||||||
import com.comphenix.protocol.utility.MinecraftReflection;
|
|
||||||
import com.comphenix.protocol.utility.MinecraftVersion;
|
|
||||||
import com.comphenix.protocol.wrappers.TroveWrapper.CannotFindTroveNoEntryValue;
|
|
||||||
import com.google.common.base.Function;
|
import com.google.common.base.Function;
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
@ -51,13 +44,8 @@ public class PacketRegistry {
|
|||||||
public static final ReportType REPORT_INSUFFICIENT_CLIENT_PACKETS = new ReportType("Too few client packets detected: %s");
|
public static final ReportType REPORT_INSUFFICIENT_CLIENT_PACKETS = new ReportType("Too few client packets detected: %s");
|
||||||
|
|
||||||
// Two different packet registry
|
// Two different packet registry
|
||||||
private static volatile LegacyPacketRegistry LEGACY;
|
|
||||||
private static volatile ProtocolRegistry NETTY;
|
private static volatile ProtocolRegistry NETTY;
|
||||||
|
|
||||||
// Cached for legacy
|
|
||||||
private static volatile Set<PacketType> NETTY_SERVER_PACKETS;
|
|
||||||
private static volatile Set<PacketType> NETTY_CLIENT_PACKETS;
|
|
||||||
|
|
||||||
// Cached for Netty
|
// Cached for Netty
|
||||||
private static volatile Set<Integer> LEGACY_SERVER_PACKETS;
|
private static volatile Set<Integer> LEGACY_SERVER_PACKETS;
|
||||||
private static volatile Set<Integer> LEGACY_CLIENT_PACKETS;
|
private static volatile Set<Integer> LEGACY_CLIENT_PACKETS;
|
||||||
@ -72,23 +60,13 @@ public class PacketRegistry {
|
|||||||
private static void initialize() {
|
private static void initialize() {
|
||||||
if (INITIALIZED) {
|
if (INITIALIZED) {
|
||||||
// Make sure they were initialized
|
// Make sure they were initialized
|
||||||
if (NETTY == null && LEGACY == null)
|
if (NETTY == null)
|
||||||
throw new IllegalStateException("No initialized registry.");
|
throw new IllegalStateException("No initialized registry.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check for netty
|
// Check for netty
|
||||||
if (MinecraftReflection.isUsingNetty()) {
|
NETTY = new NettyProtocolRegistry();
|
||||||
if (NETTY == null) {
|
|
||||||
if (MinecraftVersion.getCurrentVersion().isAtLeast(MinecraftVersion.BOUNTIFUL_UPDATE)) {
|
|
||||||
NETTY = new NettyProtocolRegistry();
|
|
||||||
} else {
|
|
||||||
NETTY = new LegacyProtocolRegistry();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
initializeLegacy();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -98,39 +76,7 @@ public class PacketRegistry {
|
|||||||
*/
|
*/
|
||||||
public static boolean isSupported(PacketType type) {
|
public static boolean isSupported(PacketType type) {
|
||||||
initialize();
|
initialize();
|
||||||
|
return NETTY.getPacketTypeLookup().containsKey(type);
|
||||||
if (NETTY != null)
|
|
||||||
return NETTY.getPacketTypeLookup().containsKey(type);
|
|
||||||
|
|
||||||
// Look up the correct type
|
|
||||||
return type.isClient() ?
|
|
||||||
LEGACY.getClientPackets().contains(type.getLegacyId()) :
|
|
||||||
LEGACY.getServerPackets().contains(type.getLegacyId());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize the legacy packet registry.
|
|
||||||
*/
|
|
||||||
private static void initializeLegacy() {
|
|
||||||
if (LEGACY == null) {
|
|
||||||
try {
|
|
||||||
LEGACY = new LegacyPacketRegistry();
|
|
||||||
LEGACY.initialize();
|
|
||||||
} catch (InsufficientPacketsException e) {
|
|
||||||
if (e.isClient()) {
|
|
||||||
ProtocolLibrary.getErrorReporter().reportWarning(
|
|
||||||
PacketRegistry.class, Report.newBuilder(REPORT_INSUFFICIENT_CLIENT_PACKETS).messageParam(e.getPacketCount())
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
ProtocolLibrary.getErrorReporter().reportWarning(
|
|
||||||
PacketRegistry.class, Report.newBuilder(REPORT_INSUFFICIENT_SERVER_PACKETS).messageParam(e.getPacketCount())
|
|
||||||
);
|
|
||||||
}
|
|
||||||
} catch (CannotFindTroveNoEntryValue e) {
|
|
||||||
ProtocolLibrary.getErrorReporter().reportWarning(PacketRegistry.class,
|
|
||||||
Report.newBuilder(REPORT_CANNOT_CORRECT_TROVE_MAP).error(e.getCause()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -143,17 +89,16 @@ public class PacketRegistry {
|
|||||||
public static Map<Class, Integer> getPacketToID() {
|
public static Map<Class, Integer> getPacketToID() {
|
||||||
initialize();
|
initialize();
|
||||||
|
|
||||||
if (NETTY != null) {
|
@SuppressWarnings("unchecked")
|
||||||
@SuppressWarnings("unchecked")
|
Map<Class, Integer> result = (Map) Maps.transformValues(
|
||||||
Map<Class, Integer> result = (Map)Maps.transformValues(NETTY.getPacketClassLookup(), new Function<PacketType, Integer>() {
|
NETTY.getPacketClassLookup(),
|
||||||
@Override
|
new Function<PacketType, Integer>() {
|
||||||
public Integer apply(PacketType type) {
|
@Override
|
||||||
return type.getLegacyId();
|
public Integer apply(PacketType type) {
|
||||||
};
|
return type.getLegacyId();
|
||||||
});
|
};
|
||||||
return result;
|
});
|
||||||
}
|
return result;
|
||||||
return LEGACY.getPacketToID();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -163,17 +108,9 @@ public class PacketRegistry {
|
|||||||
public static Map<Class, PacketType> getPacketToType() {
|
public static Map<Class, PacketType> getPacketToType() {
|
||||||
initialize();
|
initialize();
|
||||||
|
|
||||||
if (NETTY != null) {
|
@SuppressWarnings("unchecked")
|
||||||
@SuppressWarnings("unchecked")
|
Map<Class, PacketType> result = (Map) NETTY.getPacketClassLookup();
|
||||||
Map<Class, PacketType> result = (Map)NETTY.getPacketClassLookup();
|
return result;
|
||||||
return result;
|
|
||||||
}
|
|
||||||
return Maps.transformValues(LEGACY.getPacketToID(), new Function<Integer, PacketType>() {
|
|
||||||
@Override
|
|
||||||
public PacketType apply(Integer packetId) {
|
|
||||||
return PacketType.findLegacy(packetId);
|
|
||||||
};
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -185,9 +122,6 @@ public class PacketRegistry {
|
|||||||
@Deprecated
|
@Deprecated
|
||||||
public static Map<Integer, Class> getOverwrittenPackets() {
|
public static Map<Integer, Class> getOverwrittenPackets() {
|
||||||
initialize();
|
initialize();
|
||||||
|
|
||||||
if (LEGACY != null)
|
|
||||||
return LEGACY.getOverwrittenPackets();
|
|
||||||
throw new IllegalStateException("Not supported on Netty.");
|
throw new IllegalStateException("Not supported on Netty.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -199,19 +133,16 @@ public class PacketRegistry {
|
|||||||
public static Map<Integer, Class> getPreviousPackets() {
|
public static Map<Integer, Class> getPreviousPackets() {
|
||||||
initialize();
|
initialize();
|
||||||
|
|
||||||
if (NETTY != null) {
|
// Construct it first
|
||||||
// Construct it first
|
if (LEGACY_PREVIOUS_PACKETS == null) {
|
||||||
if (LEGACY_PREVIOUS_PACKETS == null) {
|
Map<Integer, Class> map = Maps.newHashMap();
|
||||||
Map<Integer, Class> map = Maps.newHashMap();
|
|
||||||
|
|
||||||
for (Entry<PacketType, Class<?>> entry : NETTY.getPacketTypeLookup().entrySet()) {
|
for (Entry<PacketType, Class<?>> entry : NETTY.getPacketTypeLookup().entrySet()) {
|
||||||
map.put(entry.getKey().getLegacyId(), entry.getValue());
|
map.put(entry.getKey().getLegacyId(), entry.getValue());
|
||||||
}
|
|
||||||
LEGACY_PREVIOUS_PACKETS = Collections.unmodifiableMap(map);
|
|
||||||
}
|
}
|
||||||
return LEGACY_PREVIOUS_PACKETS;
|
LEGACY_PREVIOUS_PACKETS = Collections.unmodifiableMap(map);
|
||||||
}
|
}
|
||||||
return LEGACY.getPreviousPackets();
|
return LEGACY_PREVIOUS_PACKETS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -225,13 +156,10 @@ public class PacketRegistry {
|
|||||||
public static Set<Integer> getServerPackets() throws FieldAccessException {
|
public static Set<Integer> getServerPackets() throws FieldAccessException {
|
||||||
initialize();
|
initialize();
|
||||||
|
|
||||||
if (NETTY != null) {
|
if (LEGACY_SERVER_PACKETS == null) {
|
||||||
if (LEGACY_SERVER_PACKETS == null) {
|
LEGACY_SERVER_PACKETS = toLegacy(NETTY.getServerPackets());
|
||||||
LEGACY_SERVER_PACKETS = toLegacy(NETTY.getServerPackets());
|
|
||||||
}
|
|
||||||
return LEGACY_SERVER_PACKETS;
|
|
||||||
}
|
}
|
||||||
return LEGACY.getServerPackets();
|
return LEGACY_SERVER_PACKETS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -241,16 +169,8 @@ public class PacketRegistry {
|
|||||||
public static Set<PacketType> getServerPacketTypes() {
|
public static Set<PacketType> getServerPacketTypes() {
|
||||||
initialize();
|
initialize();
|
||||||
|
|
||||||
if (NETTY != null) {
|
NETTY.synchronize();
|
||||||
NETTY.synchronize();
|
return NETTY.getServerPackets();
|
||||||
return NETTY.getServerPackets();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Handle legacy
|
|
||||||
if (NETTY_SERVER_PACKETS == null) {
|
|
||||||
NETTY_SERVER_PACKETS = toPacketTypes(LEGACY.getServerPackets(), Sender.SERVER);
|
|
||||||
}
|
|
||||||
return NETTY_SERVER_PACKETS;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -264,13 +184,10 @@ public class PacketRegistry {
|
|||||||
public static Set<Integer> getClientPackets() throws FieldAccessException {
|
public static Set<Integer> getClientPackets() throws FieldAccessException {
|
||||||
initialize();
|
initialize();
|
||||||
|
|
||||||
if (NETTY != null) {
|
if (LEGACY_CLIENT_PACKETS == null) {
|
||||||
if (LEGACY_CLIENT_PACKETS == null) {
|
LEGACY_CLIENT_PACKETS = toLegacy(NETTY.getClientPackets());
|
||||||
LEGACY_CLIENT_PACKETS = toLegacy(NETTY.getClientPackets());
|
|
||||||
}
|
|
||||||
return LEGACY_CLIENT_PACKETS;
|
|
||||||
}
|
}
|
||||||
return LEGACY.getClientPackets();
|
return LEGACY_CLIENT_PACKETS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -280,16 +197,8 @@ public class PacketRegistry {
|
|||||||
public static Set<PacketType> getClientPacketTypes() {
|
public static Set<PacketType> getClientPacketTypes() {
|
||||||
initialize();
|
initialize();
|
||||||
|
|
||||||
if (NETTY != null) {
|
NETTY.synchronize();
|
||||||
NETTY.synchronize();
|
return NETTY.getClientPackets();
|
||||||
return NETTY.getClientPackets();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Handle legacy
|
|
||||||
if (NETTY_CLIENT_PACKETS == null) {
|
|
||||||
NETTY_CLIENT_PACKETS = toPacketTypes(LEGACY.getClientPackets(), Sender.CLIENT);
|
|
||||||
}
|
|
||||||
return NETTY_CLIENT_PACKETS;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -338,10 +247,7 @@ public class PacketRegistry {
|
|||||||
@Deprecated
|
@Deprecated
|
||||||
public static Class getPacketClassFromID(int packetID) {
|
public static Class getPacketClassFromID(int packetID) {
|
||||||
initialize();
|
initialize();
|
||||||
|
return NETTY.getPacketTypeLookup().get(PacketType.findLegacy(packetID));
|
||||||
if (NETTY != null)
|
|
||||||
return NETTY.getPacketTypeLookup().get(PacketType.findLegacy(packetID));
|
|
||||||
return LEGACY.getPacketClassFromID(packetID);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -363,10 +269,7 @@ public class PacketRegistry {
|
|||||||
*/
|
*/
|
||||||
public static Class getPacketClassFromType(PacketType type, boolean forceVanilla) {
|
public static Class getPacketClassFromType(PacketType type, boolean forceVanilla) {
|
||||||
initialize();
|
initialize();
|
||||||
|
return NETTY.getPacketTypeLookup().get(type);
|
||||||
if (NETTY != null)
|
|
||||||
return NETTY.getPacketTypeLookup().get(type);
|
|
||||||
return LEGACY.getPacketClassFromID(type.getLegacyId(), forceVanilla);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -380,9 +283,6 @@ public class PacketRegistry {
|
|||||||
@Deprecated
|
@Deprecated
|
||||||
public static Class getPacketClassFromID(int packetID, boolean forceVanilla) {
|
public static Class getPacketClassFromID(int packetID, boolean forceVanilla) {
|
||||||
initialize();
|
initialize();
|
||||||
|
|
||||||
if (LEGACY != null)
|
|
||||||
return LEGACY.getPacketClassFromID(packetID, forceVanilla);
|
|
||||||
return getPacketClassFromID(packetID);
|
return getPacketClassFromID(packetID);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -397,10 +297,7 @@ public class PacketRegistry {
|
|||||||
@Deprecated
|
@Deprecated
|
||||||
public static int getPacketID(Class<?> packet) {
|
public static int getPacketID(Class<?> packet) {
|
||||||
initialize();
|
initialize();
|
||||||
|
return NETTY.getPacketClassLookup().get(packet).getLegacyId();
|
||||||
if (NETTY != null)
|
|
||||||
return NETTY.getPacketClassLookup().get(packet).getLegacyId();
|
|
||||||
return LEGACY.getPacketID(packet);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -420,14 +317,6 @@ public class PacketRegistry {
|
|||||||
*/
|
*/
|
||||||
public static PacketType getPacketType(Class<?> packet, Sender sender) {
|
public static PacketType getPacketType(Class<?> packet, Sender sender) {
|
||||||
initialize();
|
initialize();
|
||||||
|
return NETTY.getPacketClassLookup().get(packet);
|
||||||
if (NETTY != null) {
|
|
||||||
return NETTY.getPacketClassLookup().get(packet);
|
|
||||||
} else {
|
|
||||||
final int id = LEGACY.getPacketID(packet);
|
|
||||||
|
|
||||||
return PacketType.hasLegacy(id) ?
|
|
||||||
PacketType.fromLegacy(id, sender) : null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user