mirror of
https://github.com/libraryaddict/LibsDisguises.git
synced 2024-12-04 13:54:35 +01:00
- Changed entire project to gradle
- Updated for 1.8.3 - No more errors, woo
This commit is contained in:
parent
14757a035b
commit
573f4cdc88
5
.gitignore
vendored
5
.gitignore
vendored
@ -16,6 +16,10 @@ local.properties
|
||||
.settings/
|
||||
.loadpath
|
||||
target/
|
||||
build
|
||||
lib
|
||||
dist
|
||||
|
||||
|
||||
# External tool builders
|
||||
.externalToolBuilders/
|
||||
@ -214,3 +218,4 @@ pip-log.txt
|
||||
|
||||
#Mr Developer
|
||||
.mr.developer.cfg
|
||||
/.nb-gradle/private/
|
1
.gradle/2.2.1/taskArtifacts/cache.properties
Normal file
1
.gradle/2.2.1/taskArtifacts/cache.properties
Normal file
@ -0,0 +1 @@
|
||||
#Thu Feb 26 11:28:25 EST 2015
|
BIN
.gradle/2.2.1/taskArtifacts/cache.properties.lock
Normal file
BIN
.gradle/2.2.1/taskArtifacts/cache.properties.lock
Normal file
Binary file not shown.
BIN
.gradle/2.2.1/taskArtifacts/fileHashes.bin
Normal file
BIN
.gradle/2.2.1/taskArtifacts/fileHashes.bin
Normal file
Binary file not shown.
BIN
.gradle/2.2.1/taskArtifacts/fileSnapshots.bin
Normal file
BIN
.gradle/2.2.1/taskArtifacts/fileSnapshots.bin
Normal file
Binary file not shown.
BIN
.gradle/2.2.1/taskArtifacts/outputFileStates.bin
Normal file
BIN
.gradle/2.2.1/taskArtifacts/outputFileStates.bin
Normal file
Binary file not shown.
BIN
.gradle/2.2.1/taskArtifacts/taskArtifacts.bin
Normal file
BIN
.gradle/2.2.1/taskArtifacts/taskArtifacts.bin
Normal file
Binary file not shown.
57
build.gradle
Normal file
57
build.gradle
Normal file
@ -0,0 +1,57 @@
|
||||
apply plugin: 'java'
|
||||
|
||||
sourceCompatibility = '1.8'
|
||||
ext.spigotVersion = '1.8.3-R0.1-SNAPSHOT'
|
||||
|
||||
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
|
||||
|
||||
repositories {
|
||||
|
||||
mavenCentral()
|
||||
|
||||
maven {
|
||||
name 'Spigot'
|
||||
url 'https://hub.spigotmc.org/nexus/content/groups/public/'
|
||||
}
|
||||
|
||||
maven {
|
||||
name 'Vault-Repo'
|
||||
url 'http://nexus.theyeticave.net/content/repositories/pub_releases'
|
||||
}
|
||||
|
||||
maven {
|
||||
name 'shadowvolt-repo'
|
||||
url 'http://ci.shadowvolt.com/plugin/repository/everything'
|
||||
}
|
||||
}
|
||||
|
||||
tasks.build.doLast {
|
||||
File export = file('build/libs/LibsDisguises.jar')
|
||||
File dest = file('dist')
|
||||
dest.mkdir()
|
||||
dest.listFiles().each {
|
||||
it.delete()
|
||||
}
|
||||
export.renameTo(new File(dest, "LibsDisguises.jar"))
|
||||
file('build').delete()
|
||||
println "Copied LibsDisguises.jar into /dist"
|
||||
println "LibsDisguises is finished compiling, have a nice day!"
|
||||
}
|
||||
|
||||
file('libs').mkdirs()
|
||||
|
||||
//Retrieves spigot-1.8.jar server file from link
|
||||
ant.get src: 'https://www.dropbox.com/s/k7simfgpdun3f8q/spigot-1.8.jar?dl=1', dest: file('libs'), verbose: false, skipexisting: true
|
||||
|
||||
jar {
|
||||
baseName "LibsDisguises"
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile files(
|
||||
'libs/spigot-1.8.jar'
|
||||
)
|
||||
compile 'org.bukkit:bukkit:' + project.ext.spigotVersion
|
||||
compile 'com.comphenix.protocol:ProtocolLib:3.6.3-SNAPSHOT'
|
||||
testCompile group: 'junit', name: 'junit', version: '4.10'
|
||||
}
|
BIN
libs/spigot-1.8.jar
Normal file
BIN
libs/spigot-1.8.jar
Normal file
Binary file not shown.
107
pom.xml
107
pom.xml
@ -1,107 +0,0 @@
|
||||
<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">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>LibsDisguises</groupId>
|
||||
<artifactId>LibsDisguises</artifactId>
|
||||
<version>8.2.6-SNAPSHOT</version>
|
||||
|
||||
<build>
|
||||
<sourceDirectory>src</sourceDirectory>
|
||||
<testSourceDirectory>test</testSourceDirectory>
|
||||
<defaultGoal>clean package</defaultGoal>
|
||||
<directory>target</directory>
|
||||
<finalName>LibsDisguises</finalName>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>2.3.2</version>
|
||||
<configuration>
|
||||
<source>1.6</source>
|
||||
<target>1.6</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-shade-plugin</artifactId>
|
||||
<version>1.5</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>shade</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<artifactSet>
|
||||
<includes>
|
||||
<include>com.fasterxml.uuid:java-uuid-generator</include>
|
||||
</includes>
|
||||
</artifactSet>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
<resources>
|
||||
<resource>
|
||||
<targetPath>.</targetPath>
|
||||
<filtering>true</filtering>
|
||||
<directory>${project.basedir}</directory>
|
||||
<includes>
|
||||
<include>plugin.yml</include>
|
||||
<include>config.yml</include>
|
||||
<include>README.md</include>
|
||||
</includes>
|
||||
</resource>
|
||||
</resources>
|
||||
</build>
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>md_5-repo</id>
|
||||
<url>http://repo.md-5.net/content/groups/public/</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>shadowvolt-repo</id>
|
||||
<name>Shadowvolt Maven Repository</name>
|
||||
<url>http://ci.shadowvolt.com/plugin/repository/everything/</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.comphenix.protocol</groupId>
|
||||
<artifactId>ProtocolLib</artifactId>
|
||||
<version>3.6.3-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.spigotmc</groupId>
|
||||
<artifactId>spigot-api</artifactId>
|
||||
<version>1.7.8-R0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.11</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.spigotmc</groupId>
|
||||
<artifactId>spigot</artifactId>
|
||||
<version>1.7.10-R0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<distributionManagement>
|
||||
<repository>
|
||||
<id>md_5-releases</id>
|
||||
<url>http://repo.md-5.net/content/repositories/releases/</url>
|
||||
</repository>
|
||||
<snapshotRepository>
|
||||
<id>md_5-snapshots</id>
|
||||
<url>http://repo.md-5.net/content/repositories/snapshots/</url>
|
||||
</snapshotRepository>
|
||||
</distributionManagement>
|
||||
</project>
|
1
settings.gradle
Normal file
1
settings.gradle
Normal file
@ -0,0 +1 @@
|
||||
rootProject.name = 'LibsDisguises'
|
@ -15,7 +15,6 @@ import me.libraryaddict.disguise.commands.*;
|
||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.FutureDisguiseType;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.AgeableWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.GuardianWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.HorseWatcher;
|
||||
@ -26,11 +25,9 @@ import me.libraryaddict.disguise.disguisetypes.watchers.TameableWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.ZombieWatcher;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseSound;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
import me.libraryaddict.disguise.utilities.FakeBoundingBox;
|
||||
import me.libraryaddict.disguise.utilities.PacketsManager;
|
||||
import me.libraryaddict.disguise.utilities.ReflectionManager;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseValues;
|
||||
import me.libraryaddict.disguise.utilities.ReflectionManager.LibVersion;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Ageable;
|
||||
@ -154,7 +151,7 @@ public class LibsDisguises extends JavaPlugin {
|
||||
*/
|
||||
private void registerValues() {
|
||||
for (DisguiseType disguiseType : DisguiseType.values()) {
|
||||
if (disguiseType.getEntityType() == null && !(disguiseType.is1_8() && LibVersion.is1_8())) {
|
||||
if (disguiseType.getEntityType() == null) {
|
||||
continue;
|
||||
}
|
||||
Class watcherClass = null;
|
||||
@ -209,25 +206,6 @@ public class LibsDisguises extends JavaPlugin {
|
||||
if (DisguiseValues.getDisguiseValues(disguiseType) != null) {
|
||||
continue;
|
||||
}
|
||||
if (disguiseType.is1_8()) {
|
||||
int entitySize = 0;
|
||||
FutureDisguiseType futureType = disguiseType.getFutureType();
|
||||
DisguiseValues disguiseValues = new DisguiseValues(disguiseType, null, entitySize, futureType.getMaxHealth());
|
||||
Object[] objs = disguiseType.getFutureType().getDataWatcher();
|
||||
for (int i = 0; i < objs.length; i += 2) {
|
||||
disguiseValues.setMetaValue((Integer) objs[i], objs[i + 1]);
|
||||
}
|
||||
|
||||
// Get the bounding box
|
||||
float[] box = futureType.getBoundingBox();
|
||||
disguiseValues.setAdultBox(new FakeBoundingBox(box[0], box[1], box[2]));
|
||||
/* if (disguiseType == DisguiseType.RABBIT) {
|
||||
((Ageable) bukkitEntity).setBaby();
|
||||
disguiseValues.setBabyBox(ReflectionManager.getBoundingBox(bukkitEntity));
|
||||
}
|
||||
disguiseValues.setEntitySize(ReflectionManager.getSize(bukkitEntity));*/
|
||||
continue;
|
||||
}
|
||||
String nmsEntityName = toReadable(disguiseType.name());
|
||||
switch (disguiseType) {
|
||||
case WITHER_SKELETON:
|
||||
@ -264,6 +242,9 @@ public class LibsDisguises extends JavaPlugin {
|
||||
case LEASH_HITCH:
|
||||
nmsEntityName = "Leash";
|
||||
break;
|
||||
case ELDER_GUARDIAN:
|
||||
nmsEntityName = "Guardian";
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
@ -64,7 +64,7 @@ public abstract class Disguise {
|
||||
protected void createDisguise(DisguiseType newType) {
|
||||
if (getWatcher() != null)
|
||||
return;
|
||||
if (!(LibVersion.is1_8() && newType.is1_8()) && newType.getEntityType() == null) {
|
||||
if (newType.getEntityType() == null) {
|
||||
throw new RuntimeException(
|
||||
"DisguiseType "
|
||||
+ newType
|
||||
@ -101,7 +101,7 @@ public abstract class Disguise {
|
||||
}
|
||||
|
||||
else if (getType() == DisguiseType.ELDER_GUARDIAN) {
|
||||
getWatcher().setValue(14, 0 | 4);
|
||||
getWatcher().setValue(16, 0 | 4);
|
||||
}
|
||||
// Else if its a horse. Set the horse watcher type
|
||||
else if (getWatcher() instanceof HorseWatcher) {
|
@ -2,17 +2,16 @@ package me.libraryaddict.disguise.disguisetypes;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
import me.libraryaddict.disguise.utilities.ReflectionManager.LibVersion;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Guardian;
|
||||
import org.bukkit.entity.Horse;
|
||||
import org.bukkit.entity.Skeleton;
|
||||
import org.bukkit.entity.Zombie;
|
||||
|
||||
public enum DisguiseType {
|
||||
ARMOR_STAND(FutureDisguiseType.ARMOR_STAND),
|
||||
ARMOR_STAND(78),
|
||||
|
||||
ARROW(60),
|
||||
|
||||
@ -36,7 +35,7 @@ public enum DisguiseType {
|
||||
|
||||
EGG(62),
|
||||
|
||||
ELDER_GUARDIAN(FutureDisguiseType.ELDER_GUARDIAN),
|
||||
ELDER_GUARDIAN,
|
||||
|
||||
ENDER_CRYSTAL(51),
|
||||
|
||||
@ -48,7 +47,7 @@ public enum DisguiseType {
|
||||
|
||||
ENDERMAN,
|
||||
|
||||
ENDERMITE(FutureDisguiseType.ENDERMITE),
|
||||
ENDERMITE,
|
||||
|
||||
EXPERIENCE_ORB,
|
||||
|
||||
@ -64,7 +63,7 @@ public enum DisguiseType {
|
||||
|
||||
GIANT,
|
||||
|
||||
GUARDIAN(FutureDisguiseType.GUARDIAN),
|
||||
GUARDIAN,
|
||||
|
||||
HORSE,
|
||||
|
||||
@ -106,7 +105,7 @@ public enum DisguiseType {
|
||||
|
||||
PRIMED_TNT(50),
|
||||
|
||||
RABBIT(FutureDisguiseType.RABBIT),
|
||||
RABBIT,
|
||||
|
||||
SHEEP,
|
||||
|
||||
@ -150,7 +149,7 @@ public enum DisguiseType {
|
||||
|
||||
ZOMBIE_VILLAGER;
|
||||
|
||||
private static Method isVillager, getVariant, getSkeletonType;
|
||||
private static Method isVillager, getVariant, getSkeletonType, isElder;
|
||||
|
||||
static {
|
||||
// We set the entity type in this so that we can safely ignore disguisetypes which don't exist in older versions of MC.
|
||||
@ -175,6 +174,9 @@ public enum DisguiseType {
|
||||
case WITHER_SKELETON:
|
||||
toUse = DisguiseType.SKELETON;
|
||||
break;
|
||||
case ELDER_GUARDIAN:
|
||||
toUse = DisguiseType.GUARDIAN;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -196,6 +198,10 @@ public enum DisguiseType {
|
||||
getSkeletonType = Skeleton.class.getMethod("getSkeletonType");
|
||||
} catch (Throwable ignored) {
|
||||
}
|
||||
try {
|
||||
isElder = Guardian.class.getMethod("isElder");
|
||||
} catch (Throwable ignored) {
|
||||
}
|
||||
}
|
||||
|
||||
public static DisguiseType getType(Entity entity) {
|
||||
@ -228,6 +234,15 @@ public enum DisguiseType {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
break;
|
||||
case GUARDIAN:
|
||||
try {
|
||||
if ((Boolean) isElder.invoke(entity)) {
|
||||
disguiseType = DisguiseType.ELDER_GUARDIAN;
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -244,10 +259,9 @@ public enum DisguiseType {
|
||||
|
||||
private int defaultId, entityId;
|
||||
private EntityType entityType;
|
||||
private FutureDisguiseType futureType;
|
||||
private Class<? extends FlagWatcher> watcherClass;
|
||||
|
||||
private DisguiseType(FutureDisguiseType disguiseType, int... ints) {
|
||||
private DisguiseType(int... ints) {
|
||||
for (int i = 0; i < ints.length; i++) {
|
||||
int value = ints[i];
|
||||
switch (i) {
|
||||
@ -261,13 +275,6 @@ public enum DisguiseType {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (LibVersion.is1_8()) {
|
||||
futureType = disguiseType;
|
||||
}
|
||||
}
|
||||
|
||||
private DisguiseType(int... ints) {
|
||||
this(null, ints);
|
||||
}
|
||||
|
||||
public int getDefaultId() {
|
||||
@ -275,9 +282,6 @@ public enum DisguiseType {
|
||||
}
|
||||
|
||||
public Class<? extends Entity> getEntityClass() {
|
||||
if (futureType != null) {
|
||||
return futureType.getEntityClass();
|
||||
}
|
||||
if (entityType != null) {
|
||||
return getEntityType().getEntityClass();
|
||||
}
|
||||
@ -292,28 +296,20 @@ public enum DisguiseType {
|
||||
return entityType;
|
||||
}
|
||||
|
||||
public FutureDisguiseType getFutureType() {
|
||||
return futureType;
|
||||
}
|
||||
|
||||
public int getTypeId() {
|
||||
return is1_8() ? futureType.getEntityId() : (int) getEntityType().getTypeId();
|
||||
return (int) getEntityType().getTypeId();
|
||||
}
|
||||
|
||||
public Class getWatcherClass() {
|
||||
return watcherClass;
|
||||
}
|
||||
|
||||
public boolean is1_8() {
|
||||
return futureType != null;
|
||||
}
|
||||
|
||||
public boolean isMisc() {
|
||||
return is1_8() ? !futureType.isAlive() : getEntityType() != null && !getEntityType().isAlive();
|
||||
return getEntityType() != null && !getEntityType().isAlive();
|
||||
}
|
||||
|
||||
public boolean isMob() {
|
||||
return is1_8() ? futureType.isAlive() : getEntityType() != null && getEntityType().isAlive() && !isPlayer();
|
||||
return getEntityType() != null && getEntityType().isAlive() && !isPlayer();
|
||||
}
|
||||
|
||||
public boolean isPlayer() {
|
@ -158,7 +158,7 @@ public class FlagWatcher {
|
||||
}
|
||||
|
||||
public String getCustomName() {
|
||||
return (String) getValue(10, null);
|
||||
return (String) getValue(2, null);
|
||||
}
|
||||
|
||||
protected TargetedDisguise getDisguise() {
|
||||
@ -207,7 +207,7 @@ public class FlagWatcher {
|
||||
}
|
||||
|
||||
public boolean isCustomNameVisible() {
|
||||
return (Byte) getValue(11, (byte) 0) == 1;
|
||||
return (Byte) getValue(3, (byte) 0) == 1;
|
||||
}
|
||||
|
||||
public boolean isEntityAnimationsAdded() {
|
||||
@ -296,13 +296,13 @@ public class FlagWatcher {
|
||||
if (name != null && name.length() > 64) {
|
||||
name = name.substring(0, 64);
|
||||
}
|
||||
setValue(10, name);
|
||||
sendData(10);
|
||||
setValue(2, name);
|
||||
sendData(2);
|
||||
}
|
||||
|
||||
public void setCustomNameVisible(boolean display) {
|
||||
setValue(11, (byte) (display ? 1 : 0));
|
||||
sendData(11);
|
||||
setValue(3, (byte) (display ? 1 : 0));
|
||||
sendData(3);
|
||||
}
|
||||
|
||||
private void setFlag(int byteValue, boolean flag) {
|
@ -153,32 +153,30 @@ public class PlayerDisguise extends TargetedDisguise {
|
||||
}
|
||||
|
||||
public PlayerDisguise setSkin(String skinToUse) {
|
||||
if (LibVersion.is1_7_6()) {
|
||||
this.skinToUse = skinToUse;
|
||||
if (skinToUse == null) {
|
||||
this.currentLookup = null;
|
||||
this.gameProfile = null;
|
||||
} else {
|
||||
if (skinToUse.length() > 16) {
|
||||
this.skinToUse = skinToUse.substring(0, 16);
|
||||
}
|
||||
currentLookup = new LibsProfileLookup() {
|
||||
this.skinToUse = skinToUse;
|
||||
if (skinToUse == null) {
|
||||
this.currentLookup = null;
|
||||
this.gameProfile = null;
|
||||
} else {
|
||||
if (skinToUse.length() > 16) {
|
||||
this.skinToUse = skinToUse.substring(0, 16);
|
||||
}
|
||||
currentLookup = new LibsProfileLookup() {
|
||||
|
||||
@Override
|
||||
public void onLookup(WrappedGameProfile gameProfile) {
|
||||
if (currentLookup == this && gameProfile != null) {
|
||||
setSkin(gameProfile);
|
||||
if (!gameProfile.getProperties().isEmpty() && DisguiseUtilities.isDisguiseInUse(PlayerDisguise.this)) {
|
||||
DisguiseUtilities.refreshTrackers(PlayerDisguise.this);
|
||||
}
|
||||
currentLookup = null;
|
||||
@Override
|
||||
public void onLookup(WrappedGameProfile gameProfile) {
|
||||
if (currentLookup == this && gameProfile != null) {
|
||||
setSkin(gameProfile);
|
||||
if (!gameProfile.getProperties().isEmpty() && DisguiseUtilities.isDisguiseInUse(PlayerDisguise.this)) {
|
||||
DisguiseUtilities.refreshTrackers(PlayerDisguise.this);
|
||||
}
|
||||
currentLookup = null;
|
||||
}
|
||||
};
|
||||
WrappedGameProfile gameProfile = DisguiseUtilities.getProfileFromMojang(this.skinToUse, currentLookup);
|
||||
if (gameProfile != null) {
|
||||
setSkin(gameProfile);
|
||||
}
|
||||
};
|
||||
WrappedGameProfile gameProfile = DisguiseUtilities.getProfileFromMojang(this.skinToUse, currentLookup);
|
||||
if (gameProfile != null) {
|
||||
setSkin(gameProfile);
|
||||
}
|
||||
}
|
||||
return this;
|
@ -17,7 +17,7 @@ public class AgeableWatcher extends LivingWatcher {
|
||||
}
|
||||
|
||||
public boolean isBaby() {
|
||||
return (Integer) getValue(12, 0) < 0;
|
||||
return ((Byte) getValue(12, (byte) 0)).intValue() < 0;
|
||||
}
|
||||
|
||||
public void setAdult() {
|
||||
@ -25,7 +25,7 @@ public class AgeableWatcher extends LivingWatcher {
|
||||
}
|
||||
|
||||
public void setAge(int newAge) {
|
||||
setValue(12, newAge);
|
||||
setValue(12, (byte) newAge);
|
||||
sendData(12);
|
||||
}
|
||||
|
||||
@ -34,7 +34,7 @@ public class AgeableWatcher extends LivingWatcher {
|
||||
}
|
||||
|
||||
public void setBaby(boolean isBaby) {
|
||||
setValue(12, isBaby ? -24000 : 0);
|
||||
setValue(12, (byte) (isBaby ? -1 : 0));
|
||||
sendData(12);
|
||||
}
|
||||
|
@ -36,7 +36,7 @@ public class EndermanWatcher extends LivingWatcher {
|
||||
|
||||
@Override
|
||||
public void setItemInHand(ItemStack itemstack) {
|
||||
setValue(16, (byte) (itemstack.getTypeId() & 255));
|
||||
setValue(16, (short) (itemstack.getTypeId() & 255));
|
||||
setValue(17, (byte) (itemstack.getDurability() & 255));
|
||||
}
|
||||
|
@ -13,11 +13,11 @@ public class ItemFrameWatcher extends FlagWatcher {
|
||||
public ItemStack getItem() {
|
||||
if (getValue(2, null) == null)
|
||||
return new ItemStack(0);
|
||||
return (ItemStack) getValue(2, null);
|
||||
return (ItemStack) getValue(8, null);
|
||||
}
|
||||
|
||||
public int getRotation() {
|
||||
return (Integer) getValue(3, 0);
|
||||
return (Integer) getValue(9, 0);
|
||||
}
|
||||
|
||||
public void setItem(ItemStack newItem) {
|
||||
@ -25,13 +25,13 @@ public class ItemFrameWatcher extends FlagWatcher {
|
||||
newItem = new ItemStack(0);
|
||||
newItem = newItem.clone();
|
||||
newItem.setAmount(1);
|
||||
setValue(2, newItem);
|
||||
sendData(2);
|
||||
setValue(8, newItem);
|
||||
sendData(8);
|
||||
}
|
||||
|
||||
public void setRotation(int rotation) {
|
||||
setValue(3, (byte) (rotation % 4));
|
||||
sendData(3);
|
||||
setValue(9, (byte) (rotation % 4));
|
||||
sendData(9);
|
||||
}
|
||||
|
||||
}
|
@ -110,7 +110,7 @@ public class PlayerWatcher extends LivingWatcher {
|
||||
PacketContainer packet = new PacketContainer(PacketType.Play.Server.ANIMATION);
|
||||
StructureModifier<Integer> mods = packet.getIntegers();
|
||||
mods.write(0, getDisguise().getEntity().getEntityId());
|
||||
mods.write(1, LibVersion.is1_7() ? 3 : 2);
|
||||
mods.write(1, 3);
|
||||
for (Player player : DisguiseUtilities.getPerverts(getDisguise())) {
|
||||
ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet);
|
||||
|
@ -339,7 +339,7 @@ public abstract class BaseDisguiseCommand implements CommandExecutor {
|
||||
throw new DisguiseParseException(ChatColor.RED + "Error! The disguise " + ChatColor.GREEN + args[0]
|
||||
+ ChatColor.RED + " doesn't exist!");
|
||||
}
|
||||
if (!(LibVersion.is1_8() && disguiseType.is1_8()) && disguiseType.getEntityType() == null) {
|
||||
if (disguiseType.getEntityType() == null) {
|
||||
throw new DisguiseParseException(ChatColor.RED + "Error! This version of minecraft does not have that disguise!");
|
||||
}
|
||||
if (!map.containsKey(disguiseType)) {
|
@ -66,8 +66,7 @@ public enum DisguiseSound {
|
||||
|
||||
PIG_ZOMBIE("mob.zombiepig.zpighurt", null, "mob.zombiepig.zpigdeath", "mob.zombiepig.zpig", "mob.zombiepig.zpigangry"),
|
||||
|
||||
PLAYER(LibVersion.is1_7() ? "game.player.hurt" : "damage.hit", "step.grass", LibVersion.is1_7() ? "game.player.hurt"
|
||||
: "damage.hit", null),
|
||||
PLAYER("game.player.hurt", "step.grass", "game.player.hurt", null),
|
||||
|
||||
RABBIT("mob.rabbit.hurt", "mob.rabbit.hop", "mob.rabbit.death", "mob.rabbit.idle"),
|
||||
|
@ -23,13 +23,9 @@ import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.PlayerDisguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.TargetedDisguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.AgeableWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.EndermanWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.ItemFrameWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.MinecartWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.PlayerWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.ZombieWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.TargetedDisguise.TargetType;
|
||||
import me.libraryaddict.disguise.utilities.ReflectionManager.LibVersion;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
@ -41,6 +37,7 @@ import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Zombie;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
@ -97,30 +94,15 @@ public class DisguiseUtilities {
|
||||
block = ((Object[]) ReflectionManager.getNmsField(ReflectionManager.getNmsClass("Block"), "byId").get(null))[Material.BED_BLOCK
|
||||
.getId()];
|
||||
}
|
||||
|
||||
if (LibVersion.is1_8()) {
|
||||
Method fromLegacyData = block.getClass().getMethod("fromLegacyData", int.class);
|
||||
Method setType = chunkSection.getClass().getMethod("setType", int.class, int.class, int.class,
|
||||
ReflectionManager.getNmsClass("IBlockData"));
|
||||
Method setSky = chunkSection.getClass().getMethod("a", int.class, int.class, int.class, int.class);
|
||||
Method setEmitted = chunkSection.getClass().getMethod("b", int.class, int.class, int.class, int.class);
|
||||
for (BlockFace face : new BlockFace[] { BlockFace.EAST, BlockFace.WEST, BlockFace.NORTH, BlockFace.SOUTH }) {
|
||||
setType.invoke(chunkSection, 1 + face.getModX(), 0, 1 + face.getModZ(), fromLegacyData.invoke(block, face.ordinal()));
|
||||
setSky.invoke(chunkSection, 1 + face.getModX(), 0, 1 + face.getModZ(), 0);
|
||||
setEmitted.invoke(chunkSection, 1 + face.getModX(), 0, 1 + face.getModZ(), 0);
|
||||
}
|
||||
} else {
|
||||
Method setId = chunkSection.getClass().getMethod("setTypeId", int.class, int.class, int.class,
|
||||
ReflectionManager.getNmsClass("Block"));
|
||||
Method setData = chunkSection.getClass().getMethod("setData", int.class, int.class, int.class, int.class);
|
||||
Method setSky = chunkSection.getClass().getMethod("setSkyLight", int.class, int.class, int.class, int.class);
|
||||
Method setEmitted = chunkSection.getClass().getMethod("setEmittedLight", int.class, int.class, int.class, int.class);
|
||||
for (BlockFace face : new BlockFace[] { BlockFace.EAST, BlockFace.WEST, BlockFace.NORTH, BlockFace.SOUTH }) {
|
||||
setId.invoke(chunkSection, 1 + face.getModX(), 0, 1 + face.getModZ(), block);
|
||||
setData.invoke(chunkSection, 1 + face.getModX(), 0, 1 + face.getModZ(), face.ordinal());
|
||||
setSky.invoke(chunkSection, 1 + face.getModX(), 0, 1 + face.getModZ(), 0);
|
||||
setEmitted.invoke(chunkSection, 1 + face.getModX(), 0, 1 + face.getModZ(), 0);
|
||||
}
|
||||
Method fromLegacyData = block.getClass().getMethod("fromLegacyData", int.class);
|
||||
Method setType = chunkSection.getClass().getMethod("setType", int.class, int.class, int.class,
|
||||
ReflectionManager.getNmsClass("IBlockData"));
|
||||
Method setSky = chunkSection.getClass().getMethod("a", int.class, int.class, int.class, int.class);
|
||||
Method setEmitted = chunkSection.getClass().getMethod("b", int.class, int.class, int.class, int.class);
|
||||
for (BlockFace face : new BlockFace[] { BlockFace.EAST, BlockFace.WEST, BlockFace.NORTH, BlockFace.SOUTH }) {
|
||||
setType.invoke(chunkSection, 1 + face.getModX(), 0, 1 + face.getModZ(), fromLegacyData.invoke(block, face.ordinal()));
|
||||
setSky.invoke(chunkSection, 1 + face.getModX(), 0, 1 + face.getModZ(), 0);
|
||||
setEmitted.invoke(chunkSection, 1 + face.getModX(), 0, 1 + face.getModZ(), 0);
|
||||
}
|
||||
|
||||
Object[] array = (Object[]) Array.newInstance(chunkSection.getClass(), 16);
|
||||
@ -341,7 +323,7 @@ public class DisguiseUtilities {
|
||||
try {
|
||||
packets[i] = ProtocolLibrary.getProtocolManager()
|
||||
.createPacketConstructor(PacketType.Play.Server.MAP_CHUNK, bedChunk, true, 0, 40)
|
||||
.createPacket(bedChunk, true, 0, LibVersion.is1_8() ? 48 : 0);
|
||||
.createPacket(bedChunk, true, 0, 48);
|
||||
} catch (IllegalArgumentException ex) {
|
||||
packets[i] = ProtocolLibrary.getProtocolManager()
|
||||
.createPacketConstructor(PacketType.Play.Server.MAP_CHUNK, bedChunk, true, 0)
|
||||
@ -350,15 +332,9 @@ public class DisguiseUtilities {
|
||||
i++;
|
||||
// Make load packets
|
||||
if (oldLoc == null || i > 1) {
|
||||
try {
|
||||
packets[i] = ProtocolLibrary.getProtocolManager()
|
||||
.createPacketConstructor(PacketType.Play.Server.MAP_CHUNK_BULK, Arrays.asList(bedChunk), 40)
|
||||
.createPacket(Arrays.asList(bedChunk), LibVersion.is1_8() ? 48 : 0);
|
||||
} catch (IllegalArgumentException ex) {
|
||||
packets[i] = ProtocolLibrary.getProtocolManager()
|
||||
.createPacketConstructor(PacketType.Play.Server.MAP_CHUNK_BULK, List.class)
|
||||
.createPacket(Arrays.asList(bedChunk));
|
||||
}
|
||||
packets[i] = ProtocolLibrary.getProtocolManager()
|
||||
.createPacketConstructor(PacketType.Play.Server.MAP_CHUNK_BULK, Arrays.asList(bedChunk))
|
||||
.createPacket(Arrays.asList(bedChunk));
|
||||
i++;
|
||||
}
|
||||
}
|
||||
@ -370,19 +346,13 @@ public class DisguiseUtilities {
|
||||
PacketContainer setBed = new PacketContainer(PacketType.Play.Server.BED);
|
||||
StructureModifier<Integer> bedInts = setBed.getIntegers();
|
||||
bedInts.write(0, entity.getEntityId());
|
||||
if (LibVersion.is1_8()) {
|
||||
PlayerWatcher watcher = disguise.getWatcher();
|
||||
int chunkX = (int) Math.floor(playerLocation.getX() / 16D) - 17, chunkZ = (int) Math
|
||||
.floor(playerLocation.getZ() / 16D) - 17;
|
||||
chunkX -= chunkX % 8;
|
||||
chunkZ -= chunkZ % 8;
|
||||
bedInts.write(1, (chunkX * 16) + 1 + watcher.getSleepingDirection().getModX());
|
||||
bedInts.write(3, (chunkZ * 16) + 1 + watcher.getSleepingDirection().getModZ());
|
||||
} else {
|
||||
bedInts.write(1, loc.getBlockX());
|
||||
bedInts.write(2, loc.getBlockY());
|
||||
bedInts.write(3, loc.getBlockZ());
|
||||
}
|
||||
PlayerWatcher watcher = disguise.getWatcher();
|
||||
int chunkX = (int) Math.floor(playerLocation.getX() / 16D) - 17, chunkZ = (int) Math
|
||||
.floor(playerLocation.getZ() / 16D) - 17;
|
||||
chunkX -= chunkX % 8;
|
||||
chunkZ -= chunkZ % 8;
|
||||
bedInts.write(1, (chunkX * 16) + 1 + watcher.getSleepingDirection().getModX());
|
||||
bedInts.write(3, (chunkZ * 16) + 1 + watcher.getSleepingDirection().getModZ());
|
||||
PacketContainer teleport = new PacketContainer(PacketType.Play.Server.ENTITY_TELEPORT);
|
||||
StructureModifier<Integer> ints = teleport.getIntegers();
|
||||
ints.write(0, entity.getEntityId());
|
||||
@ -495,8 +465,8 @@ public class DisguiseUtilities {
|
||||
}
|
||||
if (DisguiseAPI.isDisguiseInUse(disguise)
|
||||
&& (!gameProfile.getName().equals(
|
||||
disguise.getSkin() != null && LibVersion.is1_7_6() ? disguise.getSkin() : disguise.getName()) || (LibVersion
|
||||
.is1_7_6() && !gameProfile.getProperties().isEmpty()))) {
|
||||
disguise.getSkin() != null ? disguise.getSkin() : disguise.getName())
|
||||
|| !gameProfile.getProperties().isEmpty())) {
|
||||
disguise.setGameProfile(gameProfile);
|
||||
DisguiseUtilities.refreshTrackers(disguise);
|
||||
}
|
||||
@ -523,7 +493,7 @@ public class DisguiseUtilities {
|
||||
Player player = Bukkit.getPlayerExact(playerName);
|
||||
if (player != null) {
|
||||
WrappedGameProfile gameProfile = ReflectionManager.getGameProfile(player);
|
||||
if (!LibVersion.is1_7_6() || !gameProfile.getProperties().isEmpty()) {
|
||||
if (!gameProfile.getProperties().isEmpty()) {
|
||||
gameProfiles.put(playerName, gameProfile);
|
||||
return gameProfile;
|
||||
}
|
||||
@ -536,7 +506,7 @@ public class DisguiseUtilities {
|
||||
final WrappedGameProfile gameProfile = lookupGameProfile(origName);
|
||||
Bukkit.getScheduler().runTask(libsDisguises, new Runnable() {
|
||||
public void run() {
|
||||
if (!LibVersion.is1_7_6() || !gameProfile.getProperties().isEmpty()) {
|
||||
if (!gameProfile.getProperties().isEmpty()) {
|
||||
if (gameProfiles.containsKey(playerName) && gameProfiles.get(playerName) == null) {
|
||||
gameProfiles.put(playerName, gameProfile);
|
||||
}
|
||||
@ -613,54 +583,17 @@ public class DisguiseUtilities {
|
||||
*/
|
||||
public static List<WrappedWatchableObject> rebuildForVersion(Player player, FlagWatcher watcher,
|
||||
List<WrappedWatchableObject> list) {
|
||||
if (!LibVersion.is1_8())
|
||||
if (true) // Use for future protocol compatibility
|
||||
return list;
|
||||
ArrayList<WrappedWatchableObject> rebuiltList = new ArrayList<WrappedWatchableObject>();
|
||||
ArrayList<WrappedWatchableObject> backups = new ArrayList<WrappedWatchableObject>();
|
||||
// TODO Player and Minecart
|
||||
for (WrappedWatchableObject obj : list) {
|
||||
if (obj.getValue().getClass().getName().startsWith("org.")) {
|
||||
backups.add(obj);
|
||||
continue;
|
||||
}
|
||||
switch (obj.getIndex()) {
|
||||
case 2:
|
||||
case 3:
|
||||
if (watcher instanceof ItemFrameWatcher) {
|
||||
rebuiltList.add(new WrappedWatchableObject(obj.getIndex() + 6, obj.getValue()));
|
||||
} else {
|
||||
backups.add(obj);
|
||||
}
|
||||
break;
|
||||
case 10:
|
||||
case 11:
|
||||
rebuiltList.add(new WrappedWatchableObject(obj.getIndex() - 8, obj.getValue()));
|
||||
break;
|
||||
case 12:
|
||||
if (watcher instanceof AgeableWatcher) {
|
||||
int i = (Integer) obj.getValue();
|
||||
rebuiltList.add(new WrappedWatchableObject(obj.getIndex(), (byte) (i < 0 ? -1 : (i >= 6000 ? 1 : 0))));
|
||||
} else {
|
||||
backups.add(obj);
|
||||
}
|
||||
break;
|
||||
case 16:
|
||||
if (watcher instanceof EndermanWatcher) {
|
||||
rebuiltList.add(new WrappedWatchableObject(obj.getIndex(), ((Byte) obj.getValue()).shortValue()));
|
||||
} else {
|
||||
backups.add(obj);
|
||||
}
|
||||
break;
|
||||
case 20:
|
||||
if (watcher instanceof MinecartWatcher) {
|
||||
// TODO
|
||||
backups.add(obj);
|
||||
} else {
|
||||
backups.add(obj);
|
||||
}
|
||||
default:
|
||||
backups.add(obj);
|
||||
break;
|
||||
// TODO: Future version support
|
||||
}
|
||||
}
|
||||
Iterator<WrappedWatchableObject> itel = backups.iterator();
|
||||
@ -687,6 +620,8 @@ public class DisguiseUtilities {
|
||||
if (disguise.isDisguiseInUse() && disguise.getEntity() instanceof Player
|
||||
&& ((Player) disguise.getEntity()).getName().equalsIgnoreCase(player)) {
|
||||
removeSelfDisguise((Player) disguise.getEntity());
|
||||
if (disguise.isSelfDisguiseVisible())
|
||||
selfDisguised.add(disguise.getEntity().getUniqueId());
|
||||
ProtocolLibrary.getProtocolManager().sendServerPacket((Player) disguise.getEntity(), destroyPacket);
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(libsDisguises, new Runnable() {
|
||||
public void run() {
|
||||
@ -697,7 +632,6 @@ public class DisguiseUtilities {
|
||||
}
|
||||
}
|
||||
}, 2);
|
||||
DisguiseUtilities.sendSelfDisguise((Player) disguise.getEntity(), disguise);
|
||||
} else {
|
||||
final Object entityTrackerEntry = ReflectionManager.getEntityTrackerEntry(disguise.getEntity());
|
||||
if (entityTrackerEntry != null) {
|
||||
@ -781,6 +715,7 @@ public class DisguiseUtilities {
|
||||
try {
|
||||
if (selfDisguised.contains(disguise.getEntity().getUniqueId()) && disguise.isDisguiseInUse()) {
|
||||
removeSelfDisguise((Player) disguise.getEntity());
|
||||
selfDisguised.add(disguise.getEntity().getUniqueId());
|
||||
ProtocolLibrary.getProtocolManager().sendServerPacket((Player) disguise.getEntity(), destroyPacket);
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(libsDisguises, new Runnable() {
|
||||
public void run() {
|
||||
@ -850,8 +785,7 @@ public class DisguiseUtilities {
|
||||
public static void removeSelfDisguise(Player player) {
|
||||
if (selfDisguised.contains(player.getUniqueId())) {
|
||||
// Send a packet to destroy the fake entity
|
||||
PacketContainer packet = new PacketContainer(PacketType.Play.Server.ENTITY_DESTROY);
|
||||
packet.getModifier().write(0, new int[] { DisguiseAPI.getSelfDisguiseId() });
|
||||
PacketContainer packet = getDestroyPacket(DisguiseAPI.getSelfDisguiseId());
|
||||
try {
|
||||
ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet);
|
||||
} catch (Exception ex) {
|
||||
@ -979,10 +913,11 @@ public class DisguiseUtilities {
|
||||
}
|
||||
|
||||
// Resend any active potion effects
|
||||
for (Object potionEffect : player.getActivePotionEffects()) {
|
||||
for (PotionEffect potionEffect : player.getActivePotionEffects()) {
|
||||
Object mobEffect = ReflectionManager.createMobEffect(potionEffect);
|
||||
sendSelfPacket(player,
|
||||
manager.createPacketConstructor(PacketType.Play.Server.ENTITY_EFFECT, player.getEntityId(), potionEffect)
|
||||
.createPacket(player.getEntityId(), potionEffect));
|
||||
manager.createPacketConstructor(PacketType.Play.Server.ENTITY_EFFECT, player.getEntityId(), mobEffect)
|
||||
.createPacket(player.getEntityId(), mobEffect));
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
@ -2,8 +2,8 @@ package me.libraryaddict.disguise.utilities;
|
||||
|
||||
import com.comphenix.protocol.wrappers.WrappedGameProfile;
|
||||
|
||||
import net.minecraft.util.com.mojang.authlib.GameProfile;
|
||||
import net.minecraft.util.com.mojang.authlib.ProfileLookupCallback;
|
||||
import com.mojang.authlib.GameProfile;
|
||||
import com.mojang.authlib.ProfileLookupCallback;
|
||||
|
||||
public class LibsProfileLookupCaller implements ProfileLookupCallback {
|
||||
private WrappedGameProfile gameProfile;
|
@ -5,6 +5,7 @@ import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
import java.util.UUID;
|
||||
|
||||
import me.libraryaddict.disguise.DisguiseAPI;
|
||||
import me.libraryaddict.disguise.DisguiseConfig;
|
||||
@ -21,7 +22,6 @@ import me.libraryaddict.disguise.disguisetypes.watchers.PlayerWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.SheepWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.watchers.WolfWatcher;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseSound.SoundType;
|
||||
import me.libraryaddict.disguise.utilities.ReflectionManager.LibVersion;
|
||||
|
||||
import org.bukkit.Art;
|
||||
import org.bukkit.Bukkit;
|
||||
@ -84,7 +84,7 @@ public class PacketsManager {
|
||||
try {
|
||||
Player observer = event.getPlayer();
|
||||
StructureModifier<Entity> entityModifer = event.getPacket().getEntityModifier(observer.getWorld());
|
||||
Entity entity = entityModifer.read(LibVersion.is1_7() ? 0 : 1);
|
||||
Entity entity = entityModifer.read(0);
|
||||
if (entity instanceof ExperienceOrb || entity instanceof Item || entity instanceof Arrow
|
||||
|| entity == observer) {
|
||||
event.setCancelled(true);
|
||||
@ -196,12 +196,10 @@ public class PacketsManager {
|
||||
spawnPackets[0] = new PacketContainer(PacketType.Play.Server.SPAWN_ENTITY_PAINTING);
|
||||
StructureModifier<Object> mods = spawnPackets[0].getModifier();
|
||||
mods.write(0, disguisedEntity.getEntityId());
|
||||
mods.write(1, loc.getBlockX());
|
||||
mods.write(2, loc.getBlockY());
|
||||
mods.write(3, loc.getBlockZ());
|
||||
mods.write(4, ((int) loc.getYaw()) % 4);
|
||||
mods.write(1, ReflectionManager.getBlockPosition(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()));
|
||||
mods.write(2, ReflectionManager.getEnumDirection(((int) loc.getYaw()) % 4));
|
||||
int id = ((MiscDisguise) disguise).getData();
|
||||
mods.write(5, ReflectionManager.getEnumArt(Art.values()[id]));
|
||||
mods.write(3, ReflectionManager.getEnumArt(Art.values()[id]));
|
||||
|
||||
// Make the teleport packet to make it visible..
|
||||
spawnPackets[1] = new PacketContainer(PacketType.Play.Server.ENTITY_TELEPORT);
|
||||
@ -217,7 +215,7 @@ public class PacketsManager {
|
||||
|
||||
spawnPackets[0] = new PacketContainer(PacketType.Play.Server.NAMED_ENTITY_SPAWN);
|
||||
StructureModifier<String> stringMods = spawnPackets[0].getStrings();
|
||||
WrappedGameProfile gameProfile = null; // TODO Will this throw a error for older MC's? Namely pre-1.7
|
||||
WrappedGameProfile gameProfile;
|
||||
if (stringMods.size() > 0) {
|
||||
for (int i = 0; i < stringMods.size(); i++) {
|
||||
stringMods.write(i, ((PlayerDisguise) disguise).getName());
|
||||
@ -233,7 +231,7 @@ public class PacketsManager {
|
||||
if (removeName) {
|
||||
DisguiseUtilities.getAddedByPlugins().remove(name);
|
||||
}
|
||||
spawnPackets[0].getGameProfiles().write(0, gameProfile);
|
||||
spawnPackets[0].getSpecificModifier(UUID.class).write(0, gameProfile.getUUID());
|
||||
}
|
||||
StructureModifier<Integer> intMods = spawnPackets[0].getIntegers();
|
||||
intMods.write(0, disguisedEntity.getEntityId());
|
||||
@ -266,22 +264,23 @@ public class PacketsManager {
|
||||
}
|
||||
}
|
||||
|
||||
if (LibVersion.is1_8()) {
|
||||
ArrayList<PacketContainer> newPackets = new ArrayList<PacketContainer>();
|
||||
newPackets.add(null);
|
||||
for (int i = 0; i < spawnPackets.length; i++) {
|
||||
if (spawnPackets[i] != null) { // Get rid of empty packet '1' if it exists.
|
||||
newPackets.add(spawnPackets[i]);
|
||||
}
|
||||
ArrayList<PacketContainer> newPackets = new ArrayList<PacketContainer>();
|
||||
newPackets.add(null);
|
||||
for (int i = 0; i < spawnPackets.length; i++) {
|
||||
if (spawnPackets[i] != null) { // Get rid of empty packet '1' if it exists.
|
||||
newPackets.add(spawnPackets[i]);
|
||||
}
|
||||
spawnPackets = newPackets.toArray(new PacketContainer[newPackets.size()]);
|
||||
spawnPackets[0] = new PacketContainer(PacketType.Play.Server.PLAYER_INFO);
|
||||
spawnPackets[0].getGameProfiles().write(0, gameProfile);
|
||||
spawnPackets[0].getModifier().write(4, gameProfile.getName());
|
||||
PacketContainer delayedPacket = spawnPackets[0].shallowClone();
|
||||
delayedPacket.getModifier().write(0, 4);
|
||||
delayedPackets = new PacketContainer[] { delayedPacket };
|
||||
}
|
||||
spawnPackets = newPackets.toArray(new PacketContainer[newPackets.size()]);
|
||||
spawnPackets[0] = new PacketContainer(PacketType.Play.Server.PLAYER_INFO);
|
||||
spawnPackets[0].getModifier().write(0, ReflectionManager.getEnumPlayerInfoAction(0));
|
||||
List playerList = new ArrayList();
|
||||
PlayerDisguise playerDisguise = (PlayerDisguise) disguise;
|
||||
playerList.add(ReflectionManager.getPlayerInfoData(spawnPackets[0].getHandle(), playerDisguise.getGameProfile()));
|
||||
spawnPackets[0].getModifier().write(1, playerList);
|
||||
PacketContainer delayedPacket = spawnPackets[0].shallowClone();
|
||||
delayedPacket.getModifier().write(0, ReflectionManager.getEnumPlayerInfoAction(4));
|
||||
delayedPackets = new PacketContainer[] { delayedPacket };
|
||||
|
||||
} else if (disguise.getType().isMob() || disguise.getType() == DisguiseType.ARMOR_STAND) {
|
||||
|
||||
@ -615,14 +614,9 @@ public class PacketsManager {
|
||||
try {
|
||||
int typeId = soundLoc.getWorld().getBlockTypeIdAt(soundLoc.getBlockX(),
|
||||
soundLoc.getBlockY() - 1, soundLoc.getBlockZ());
|
||||
Object block;
|
||||
if (LibVersion.is1_7()) {
|
||||
block = ReflectionManager.getNmsMethod("RegistryMaterials", "a", int.class)
|
||||
.invoke(ReflectionManager.getNmsField("Block", "REGISTRY").get(null),
|
||||
typeId);
|
||||
} else {
|
||||
block = ((Object[]) ReflectionManager.getNmsField("Block", "byId").get(null))[typeId];
|
||||
}
|
||||
Object block = ReflectionManager.getNmsMethod("RegistryMaterials", "a", int.class)
|
||||
.invoke(ReflectionManager.getNmsField("Block", "REGISTRY").get(null),
|
||||
typeId);
|
||||
if (block != null) {
|
||||
Object step = ReflectionManager.getNmsField("Block", "stepSound").get(block);
|
||||
mods.write(0, ReflectionManager.getNmsMethod(step.getClass(), "getStepSound")
|
||||
@ -689,7 +683,7 @@ public class PacketsManager {
|
||||
}
|
||||
}
|
||||
} else if (event.getPacketType() == PacketType.Play.Server.ENTITY_STATUS) {
|
||||
if ((Byte) mods.read(1) == (LibVersion.is1_7() ? 2 : 1)) {
|
||||
if ((Byte) mods.read(1) == 2) {
|
||||
// It made a damage animation
|
||||
Entity entity = event.getPacket().getEntityModifier(observer.getWorld()).read(0);
|
||||
Disguise disguise = DisguiseAPI.getDisguise(observer, entity);
|
||||
@ -836,7 +830,7 @@ public class PacketsManager {
|
||||
e.printStackTrace();
|
||||
}
|
||||
} else if (event.getPacketType() == PacketType.Play.Server.ANIMATION) {
|
||||
if (event.getPacket().getIntegers().read(1) != (LibVersion.is1_7() ? 2 : 3)) {
|
||||
if (event.getPacket().getIntegers().read(1) != 2) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
} else if (event.getPacketType() == PacketType.Play.Server.ATTACH_ENTITY
|
||||
@ -853,7 +847,7 @@ public class PacketsManager {
|
||||
} else if (event.getPacketType() == PacketType.Play.Server.ENTITY_STATUS) {
|
||||
Disguise disguise = DisguiseAPI.getDisguise(event.getPlayer(), event.getPlayer());
|
||||
if (disguise.isSelfDisguiseSoundsReplaced() && !disguise.getType().isPlayer()
|
||||
&& event.getPacket().getBytes().read(0) == (LibVersion.is1_7() ? 2 : 1)) {
|
||||
&& event.getPacket().getBytes().read(0) == 2) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
@ -1342,7 +1336,7 @@ public class PacketsManager {
|
||||
// Else if the disguise is attempting to send players a forbidden packet
|
||||
else if (sentPacket.getType() == PacketType.Play.Server.ANIMATION) {
|
||||
if (disguise.getType().isMisc()
|
||||
|| (packets[0].getIntegers().read(1) == (LibVersion.is1_7() ? 2 : 3) && (!disguise.getType()
|
||||
|| (packets[0].getIntegers().read(1) == 2 && (!disguise.getType()
|
||||
.isPlayer() || (DisguiseConfig.isBedPacketsEnabled() && ((PlayerWatcher) disguise
|
||||
.getWatcher()).isSleeping())))) {
|
||||
packets = new PacketContainer[0];
|
||||
@ -1357,7 +1351,7 @@ public class PacketsManager {
|
||||
PacketContainer newPacket = new PacketContainer(PacketType.Play.Server.ANIMATION);
|
||||
StructureModifier<Integer> mods = newPacket.getIntegers();
|
||||
mods.write(0, disguise.getEntity().getEntityId());
|
||||
mods.write(1, LibVersion.is1_7() ? 3 : 2);
|
||||
mods.write(1, 3);
|
||||
packets = new PacketContainer[] { newPacket, sentPacket };
|
||||
}
|
||||
}
|
@ -4,6 +4,7 @@ import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.Modifier;
|
||||
@ -25,58 +26,29 @@ import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import com.comphenix.protocol.wrappers.WrappedGameProfile;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
|
||||
public class ReflectionManager {
|
||||
|
||||
public enum LibVersion {
|
||||
V1_6, V1_7, V1_7_10, V1_7_6, V1_8;
|
||||
V1_8;
|
||||
private static LibVersion currentVersion;
|
||||
static {
|
||||
String mcVersion = Bukkit.getVersion().split("MC: ")[1].replace(")", "");
|
||||
if (mcVersion.startsWith("1.")) {
|
||||
if (mcVersion.compareTo("1.7") < 0) {
|
||||
currentVersion = LibVersion.V1_6;
|
||||
} else if (mcVersion.startsWith("1.7")) {
|
||||
if (mcVersion.equals("1.7.10")) {
|
||||
currentVersion = LibVersion.V1_7_10;
|
||||
} else {
|
||||
currentVersion = mcVersion.compareTo("1.7.6") < 0 ? LibVersion.V1_7 : LibVersion.V1_7_6;
|
||||
}
|
||||
} else {
|
||||
currentVersion = V1_8;
|
||||
}
|
||||
}
|
||||
//String mcVersion = Bukkit.getVersion().split("MC: ")[1].replace(")", "");
|
||||
currentVersion = V1_8;
|
||||
}
|
||||
|
||||
public static LibVersion getGameVersion() {
|
||||
return currentVersion;
|
||||
}
|
||||
|
||||
public static boolean is1_6() {
|
||||
return getGameVersion() == V1_6;
|
||||
}
|
||||
|
||||
public static boolean is1_7() {
|
||||
return getGameVersion() == V1_7 || is1_7_6();
|
||||
}
|
||||
|
||||
public static boolean is1_7_10() {
|
||||
return getGameVersion() == V1_7_10 || is1_8();
|
||||
}
|
||||
|
||||
public static boolean is1_7_6() {
|
||||
return getGameVersion() == V1_7_6 || is1_7_10();
|
||||
}
|
||||
|
||||
public static boolean is1_8() {
|
||||
return getGameVersion() == V1_8;
|
||||
}
|
||||
}
|
||||
|
||||
private static final String bukkitVersion = Bukkit.getServer().getClass().getName().split("\\.")[3];
|
||||
private static final Class<?> craftItemClass;
|
||||
private static Method damageAndIdleSoundMethod;
|
||||
private static final Field entitiesField;
|
||||
private static final Constructor<?> boundingBoxConstructor;
|
||||
private static final Method setBoundingBoxMethod;
|
||||
/**
|
||||
* Map of mc-dev simple class name to fully qualified Forge class name.
|
||||
*/
|
||||
@ -92,7 +64,6 @@ public class ReflectionManager {
|
||||
*/
|
||||
private static Map<String, Map<String, Map<String, String>>> ForgeMethodMappings;
|
||||
private static final Method ihmGet;
|
||||
private static HashMap<String, Boolean> is1_8 = new HashMap<String, Boolean>();
|
||||
private static final boolean isForge = Bukkit.getServer().getName().contains("Cauldron")
|
||||
|| Bukkit.getServer().getName().contains("MCPC-Plus");
|
||||
private static final Field pingField;
|
||||
@ -224,6 +195,9 @@ public class ReflectionManager {
|
||||
trackerField = getNmsField("WorldServer", "tracker");
|
||||
entitiesField = getNmsField("EntityTracker", "trackedEntities");
|
||||
ihmGet = getNmsMethod("IntHashMap", "get", int.class);
|
||||
boundingBoxConstructor = getNmsConstructor("AxisAlignedBB",double.class, double.class, double.class,
|
||||
double.class, double.class, double.class);
|
||||
setBoundingBoxMethod = getNmsMethod("Entity", "a", getNmsClass("AxisAlignedBB"));
|
||||
}
|
||||
|
||||
public static Object createEntityInstance(String entityName) {
|
||||
@ -235,19 +209,13 @@ public class ReflectionManager {
|
||||
Object minecraftServer = getNmsMethod("MinecraftServer", "getServer").invoke(null);
|
||||
Object playerinteractmanager = getNmsClass("PlayerInteractManager").getConstructor(getNmsClass("World"))
|
||||
.newInstance(world);
|
||||
if (LibVersion.is1_7()) {
|
||||
WrappedGameProfile gameProfile = getGameProfile(null, "LibsDisguises");
|
||||
entityObject = entityClass.getConstructor(getNmsClass("MinecraftServer"), getNmsClass("WorldServer"),
|
||||
gameProfile.getHandleType(), playerinteractmanager.getClass()).newInstance(minecraftServer, world,
|
||||
gameProfile.getHandle(), playerinteractmanager);
|
||||
} else {
|
||||
entityObject = entityClass.getConstructor(getNmsClass("MinecraftServer"), getNmsClass("World"), String.class,
|
||||
playerinteractmanager.getClass()).newInstance(minecraftServer, world, "LibsDisguises",
|
||||
playerinteractmanager);
|
||||
}
|
||||
} else if (LibVersion.is1_8() && entityName.equals("EnderPearl")) {
|
||||
WrappedGameProfile gameProfile = getGameProfile(null, "LibsDisguises");
|
||||
entityObject = entityClass.getConstructor(getNmsClass("MinecraftServer"), getNmsClass("WorldServer"),
|
||||
gameProfile.getHandleType(), playerinteractmanager.getClass()).newInstance(minecraftServer, world,
|
||||
gameProfile.getHandle(), playerinteractmanager);
|
||||
} else if (entityName.equals("EnderPearl")) {
|
||||
entityObject = entityClass.getConstructor(getNmsClass("World"), getNmsClass("EntityLiving"))
|
||||
.newInstance(world, createEntityInstance("Sheep"));
|
||||
.newInstance(world, createEntityInstance("Cow"));
|
||||
} else {
|
||||
entityObject = entityClass.getConstructor(getNmsClass("World")).newInstance(world);
|
||||
}
|
||||
@ -258,18 +226,27 @@ public class ReflectionManager {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Object createMobEffect(int id, int duration, int amplification, boolean ambient, boolean particles) {
|
||||
try {
|
||||
return getNmsClass("MobEffect").getConstructor(int.class, int.class, int.class, boolean.class, boolean.class)
|
||||
.newInstance(id, duration, amplification, ambient, particles);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Object createMobEffect(PotionEffect effect) {
|
||||
return createMobEffect(effect.getType().getId(), effect.getDuration(), effect.getAmplifier(), effect.isAmbient(), effect.hasParticles());
|
||||
}
|
||||
|
||||
private static String dir2fqn(String s) {
|
||||
return s.replaceAll("/", ".");
|
||||
}
|
||||
|
||||
public static FakeBoundingBox getBoundingBox(Entity entity) {
|
||||
try {
|
||||
Object boundingBox;
|
||||
if (LibVersion.is1_8()) {
|
||||
boundingBox = getNmsMethod("Entity", "getBoundingBox").invoke(getNmsEntity(entity));
|
||||
} else {
|
||||
boundingBox = getNmsField("Entity", "boundingBox").get(getNmsEntity(entity));
|
||||
}
|
||||
Object boundingBox = getNmsMethod("Entity", "getBoundingBox").invoke(getNmsEntity(entity));
|
||||
double x = 0, y = 0, z = 0;
|
||||
int stage = 0;
|
||||
for (Field field : boundingBox.getClass().getFields()) {
|
||||
@ -368,13 +345,51 @@ public class ReflectionManager {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static WrappedGameProfile getGameProfile(Player player) {
|
||||
if (LibVersion.is1_7() || LibVersion.is1_8()) {
|
||||
return WrappedGameProfile.fromPlayer(player);
|
||||
public static Object getBlockPosition(int x, int y, int z) {
|
||||
try {
|
||||
return getNmsClass("BlockPosition").getConstructor(int.class, int.class, int.class).newInstance(x, y, z);
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Enum getEnumDirection(int direction) {
|
||||
try {
|
||||
return (Enum) getNmsMethod("EnumDirection", "fromType2", int.class).invoke(null, direction);
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Enum getEnumPlayerInfoAction(int action) {
|
||||
try {
|
||||
return (Enum) getNmsClass("PacketPlayOutPlayerInfo$EnumPlayerInfoAction").getEnumConstants()[action];
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Object getPlayerInfoData(Object playerInfoPacket, WrappedGameProfile gameProfile) {
|
||||
try {
|
||||
Object playerListName = getNmsClass("ChatComponentText").getConstructor(String.class)
|
||||
.newInstance(gameProfile.getName());
|
||||
return getNmsClass("PacketPlayOutPlayerInfo$PlayerInfoData").getConstructor(getNmsClass("PacketPlayOutPlayerInfo"),
|
||||
gameProfile.getHandleType(), int.class, getNmsClass("WorldSettings$EnumGamemode"), getNmsClass("IChatBaseComponent"))
|
||||
.newInstance(playerInfoPacket, gameProfile.getHandle(), 0,
|
||||
getNmsClass("WorldSettings$EnumGamemode").getEnumConstants()[1], playerListName);
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static WrappedGameProfile getGameProfile(Player player) {
|
||||
return WrappedGameProfile.fromPlayer(player);
|
||||
}
|
||||
|
||||
public static WrappedGameProfile getGameProfile(UUID uuid, String playerName) {
|
||||
try {
|
||||
return new WrappedGameProfile(uuid != null ? uuid : UUID.randomUUID(), playerName);
|
||||
@ -387,9 +402,7 @@ public class ReflectionManager {
|
||||
public static WrappedGameProfile getGameProfileWithThisSkin(UUID uuid, String playerName, WrappedGameProfile profileWithSkin) {
|
||||
try {
|
||||
WrappedGameProfile gameProfile = new WrappedGameProfile(uuid != null ? uuid : UUID.randomUUID(), playerName);
|
||||
if (LibVersion.is1_7_6()) {
|
||||
gameProfile.getProperties().putAll(profileWithSkin.getProperties());
|
||||
}
|
||||
gameProfile.getProperties().putAll(profileWithSkin.getProperties());
|
||||
return gameProfile;
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
@ -418,6 +431,19 @@ public class ReflectionManager {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Constructor getNmsConstructor(Class clazz, Class<?>... parameters) {
|
||||
try {
|
||||
return clazz.getConstructor(parameters);
|
||||
} catch (NoSuchMethodException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Constructor getNmsConstructor(String className, Class<?>... parameters) {
|
||||
return getNmsConstructor(getNmsClass(className), parameters);
|
||||
}
|
||||
|
||||
public static Object getNmsEntity(Entity entity) {
|
||||
try {
|
||||
return getCraftClass("entity.CraftEntity").getMethod("getHandle").invoke(entity);
|
||||
@ -496,12 +522,7 @@ public class ReflectionManager {
|
||||
try {
|
||||
float length = getNmsField("Entity", "length").getFloat(getNmsEntity(entity));
|
||||
float width = getNmsField("Entity", "width").getFloat(getNmsEntity(entity));
|
||||
float height;
|
||||
if (LibVersion.is1_8()) {
|
||||
height = (Float) getNmsMethod("Entity", "getHeadHeight").invoke(getNmsEntity(entity));
|
||||
} else {
|
||||
height = getNmsField("Entity", "height").getFloat(getNmsEntity(entity));
|
||||
}
|
||||
float height = (Float) getNmsMethod("Entity", "getHeadHeight").invoke(getNmsEntity(entity));
|
||||
return new float[] { length, width, height };
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
@ -550,12 +571,12 @@ public class ReflectionManager {
|
||||
for (Method method : getNmsClass("MinecraftServer").getMethods()) {
|
||||
if (method.getReturnType().getSimpleName().equals("GameProfileRepository")) {
|
||||
Object profileRepo = method.invoke(minecraftServer);
|
||||
Object agent = Class.forName("net.minecraft.util.com.mojang.authlib.Agent").getField("MINECRAFT").get(null);
|
||||
Object agent = Class.forName("com.mojang.authlib.Agent").getField("MINECRAFT").get(null);
|
||||
LibsProfileLookupCaller callback = new LibsProfileLookupCaller();
|
||||
profileRepo
|
||||
.getClass()
|
||||
.getMethod("findProfilesByNames", String[].class, agent.getClass(),
|
||||
Class.forName("net.minecraft.util.com.mojang.authlib.ProfileLookupCallback"))
|
||||
Class.forName("com.mojang.authlib.ProfileLookupCallback"))
|
||||
.invoke(profileRepo, new String[] { playername }, agent, callback);
|
||||
if (callback.getGameProfile() != null) {
|
||||
return callback.getGameProfile();
|
||||
@ -569,26 +590,6 @@ public class ReflectionManager {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static boolean is1_8(Player player) {
|
||||
if (LibVersion.is1_8()) {
|
||||
if (is1_8.containsKey(player.getName())) {
|
||||
return is1_8.get(player.getName());
|
||||
}
|
||||
try {
|
||||
Object nmsEntity = getNmsEntity(player);
|
||||
Object connection = getNmsField(nmsEntity.getClass(), "playerConnection").get(nmsEntity);
|
||||
Field networkManager = getNmsField(connection.getClass(), "networkManager");
|
||||
Method getVersion = getNmsMethod(networkManager.getType(), "getVersion");
|
||||
boolean is18 = (Integer) getVersion.invoke(networkManager.get(connection)) >= 28;
|
||||
is1_8.put(player.getName(), is18);
|
||||
return is18;
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean isForge() {
|
||||
return isForge;
|
||||
}
|
||||
@ -604,7 +605,7 @@ public class ReflectionManager {
|
||||
}
|
||||
|
||||
public static void removePlayer(Player player) {
|
||||
is1_8.remove(player.getName());
|
||||
|
||||
}
|
||||
|
||||
public static void setAllowSleep(Player player) {
|
||||
@ -620,43 +621,13 @@ public class ReflectionManager {
|
||||
|
||||
public static void setBoundingBox(Entity entity, FakeBoundingBox newBox) {
|
||||
try {
|
||||
Object boundingBox;
|
||||
if (LibVersion.is1_8()) {
|
||||
boundingBox = getNmsMethod("Entity", "getBoundingBox").invoke(getNmsEntity(entity));
|
||||
} else {
|
||||
boundingBox = getNmsField("Entity", "boundingBox").get(getNmsEntity(entity));
|
||||
}
|
||||
int stage = 0;
|
||||
Location loc = entity.getLocation();
|
||||
for (Field field : boundingBox.getClass().getFields()) {
|
||||
if (field.getType().getSimpleName().equals("double")) {
|
||||
stage++;
|
||||
switch (stage) {
|
||||
case 1:
|
||||
field.setDouble(boundingBox, loc.getX() - newBox.getX());
|
||||
break;
|
||||
case 2:
|
||||
// field.setDouble(boundingBox, loc.getY() - newBox.getY());
|
||||
break;
|
||||
case 3:
|
||||
field.setDouble(boundingBox, loc.getZ() - newBox.getZ());
|
||||
break;
|
||||
case 4:
|
||||
field.setDouble(boundingBox, loc.getX() + newBox.getX());
|
||||
break;
|
||||
case 5:
|
||||
field.setDouble(boundingBox, loc.getY() + newBox.getY());
|
||||
break;
|
||||
case 6:
|
||||
field.setDouble(boundingBox, loc.getZ() + newBox.getZ());
|
||||
break;
|
||||
default:
|
||||
throw new Exception("Error while setting the bounding box, more doubles than I thought??");
|
||||
}
|
||||
}
|
||||
}
|
||||
Object boundingBox = boundingBoxConstructor.newInstance(loc.getX() - newBox.getX(), loc.getY() - newBox.getY(),
|
||||
loc.getZ() - newBox.getZ(), loc.getX() + newBox.getX(), loc.getY() + newBox.getY(), loc.getZ() + newBox.getZ());
|
||||
setBoundingBoxMethod.invoke(getNmsEntity(entity), boundingBox);
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -1,7 +1,8 @@
|
||||
name: LibsDisguises
|
||||
main: me.libraryaddict.disguise.LibsDisguises
|
||||
version: ${project.version}
|
||||
version: 8.3 Unofficial
|
||||
author: libraryaddict
|
||||
authors: [Byteflux, Navid K.]
|
||||
depend: [ProtocolLib]
|
||||
commands:
|
||||
libsdisguises:
|
@ -1,178 +0,0 @@
|
||||
package me.libraryaddict.disguise.disguisetypes;
|
||||
|
||||
import org.bukkit.entity.Animals;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Monster;
|
||||
|
||||
public enum FutureDisguiseType {
|
||||
|
||||
ARMOR_STAND(Entity.class, 30, 2, new float[] { 0F, 0F, 0F }, new Object[] {
|
||||
|
||||
1, (short) 300,
|
||||
|
||||
2, "",
|
||||
|
||||
3, (byte) 0,
|
||||
|
||||
4, (byte) 0,
|
||||
|
||||
6, 1F,
|
||||
|
||||
7, 0,
|
||||
|
||||
8, (byte) 0,
|
||||
|
||||
9, (byte) 0,
|
||||
|
||||
10, (byte) 0,
|
||||
|
||||
// 11,
|
||||
// 12,
|
||||
// 13,
|
||||
// 14,
|
||||
// 15,
|
||||
// 16
|
||||
}),
|
||||
|
||||
ELDER_GUARDIAN(Monster.class, 68, 80, new float[] { 0F, 0F, 0F }, new Object[] {
|
||||
|
||||
1, (short) 300,
|
||||
|
||||
2, "",
|
||||
|
||||
3, (byte) 0,
|
||||
|
||||
4, (byte) 0,
|
||||
|
||||
6, 1F,
|
||||
|
||||
7, 0,
|
||||
|
||||
8, (byte) 0,
|
||||
|
||||
9, (byte) 0,
|
||||
|
||||
15, (byte) 0,
|
||||
|
||||
16, 0 | 4,
|
||||
|
||||
17, 0
|
||||
|
||||
}),
|
||||
|
||||
ENDERMITE(Monster.class, 67, 8, new float[] { 0F, 0F, 0F }, new Object[] {
|
||||
|
||||
0, (byte) 0,
|
||||
|
||||
1, (short) 300,
|
||||
|
||||
2, "",
|
||||
|
||||
3, (byte) 0,
|
||||
|
||||
4, (byte) 0,
|
||||
|
||||
6, 1F,
|
||||
|
||||
7, 0,
|
||||
|
||||
8, (byte) 0,
|
||||
|
||||
9, (byte) 0,
|
||||
|
||||
15, (byte) 0
|
||||
|
||||
}),
|
||||
|
||||
GUARDIAN(Monster.class, 68, 30, new float[] { 0F, 0F, 0F }, new Object[] {
|
||||
|
||||
1, (short) 300,
|
||||
|
||||
2, "",
|
||||
|
||||
3, (byte) 0,
|
||||
|
||||
4, (byte) 0,
|
||||
|
||||
6, 1F,
|
||||
|
||||
7, 0,
|
||||
|
||||
8, (byte) 0,
|
||||
|
||||
9, (byte) 0,
|
||||
|
||||
15, (byte) 0,
|
||||
|
||||
16, 0,
|
||||
|
||||
17, 0
|
||||
|
||||
}),
|
||||
|
||||
RABBIT(Animals.class, 101, 10, new float[] { 0F, 0F, 0F }, new Object[] { 1, (short) 300,
|
||||
|
||||
2, "",
|
||||
|
||||
3, (byte) 0,
|
||||
|
||||
4, (byte) 0,
|
||||
|
||||
6, 1F,
|
||||
|
||||
7, 0,
|
||||
|
||||
8, (byte) 0,
|
||||
|
||||
9, (byte) 0,
|
||||
|
||||
12, 0,
|
||||
|
||||
15, (byte) 0,
|
||||
|
||||
18, (byte) 0
|
||||
|
||||
});
|
||||
|
||||
private float[] boundingBox;
|
||||
private Object[] dataWatcher;
|
||||
private Class<? extends Entity> entityClass;
|
||||
private int entityId;
|
||||
private float maxHealth;
|
||||
|
||||
private FutureDisguiseType(Class<? extends Entity> entityClass, int entityId, float maxHealth, float[] boundingBox,
|
||||
Object[] watcherValues) {
|
||||
this.entityClass = entityClass;
|
||||
this.dataWatcher = watcherValues;
|
||||
this.boundingBox = boundingBox;
|
||||
if (watcherValues.length % 2 != 0) {
|
||||
System.out.print("Error! " + name() + " has odd number of params!");
|
||||
}
|
||||
this.entityId = entityId;
|
||||
}
|
||||
|
||||
public float[] getBoundingBox() {
|
||||
return boundingBox;
|
||||
}
|
||||
|
||||
public Object[] getDataWatcher() {
|
||||
return dataWatcher;
|
||||
}
|
||||
|
||||
public Class<? extends Entity> getEntityClass() {
|
||||
return entityClass;
|
||||
}
|
||||
|
||||
public int getEntityId() {
|
||||
return entityId;
|
||||
}
|
||||
|
||||
public float getMaxHealth() {
|
||||
return maxHealth;
|
||||
}
|
||||
|
||||
public boolean isAlive() {
|
||||
return this != ARMOR_STAND;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user