Update stats
This commit is contained in:
parent
27230d5148
commit
06ce2d0e02
@ -180,4 +180,4 @@ PacketsEnabled:
|
|||||||
# Disable this if you don't mind crashing everytime you see someone riding something disguised as a non-living entity
|
# Disable this if you don't mind crashing everytime you see someone riding something disguised as a non-living entity
|
||||||
Riding: true
|
Riding: true
|
||||||
# When disguised as a wither skull, it sends a look packet every tick so that the wither skull is facing the right way.
|
# When disguised as a wither skull, it sends a look packet every tick so that the wither skull is facing the right way.
|
||||||
WitherSkull: true
|
WitherSkull: true
|
140
pom.xml
140
pom.xml
@ -1,80 +1,80 @@
|
|||||||
<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>
|
||||||
<groupId>LibsDisguises</groupId>
|
<groupId>LibsDisguises</groupId>
|
||||||
<artifactId>LibsDisguises</artifactId>
|
<artifactId>LibsDisguises</artifactId>
|
||||||
<version>9.4.0-SNAPSHOT</version>
|
<version>9.4.0-SNAPSHOT</version>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
<sourceDirectory>src</sourceDirectory>
|
<sourceDirectory>src</sourceDirectory>
|
||||||
<defaultGoal>clean install</defaultGoal>
|
<defaultGoal>clean install</defaultGoal>
|
||||||
<directory>target</directory>
|
<directory>target</directory>
|
||||||
<finalName>LibsDisguises</finalName>
|
<finalName>LibsDisguises</finalName>
|
||||||
|
|
||||||
<resources>
|
<resources>
|
||||||
<resource>
|
<resource>
|
||||||
<targetPath>.</targetPath>
|
<targetPath>.</targetPath>
|
||||||
<filtering>true</filtering>
|
<filtering>true</filtering>
|
||||||
<directory>${project.basedir}</directory>
|
<directory>${project.basedir}</directory>
|
||||||
<includes>
|
<includes>
|
||||||
<include>plugin.yml</include>
|
<include>plugin.yml</include>
|
||||||
<include>config.yml</include>
|
<include>config.yml</include>
|
||||||
<include>disguises.yml</include>
|
<include>disguises.yml</include>
|
||||||
<include>README.md</include>
|
<include>README.md</include>
|
||||||
</includes>
|
</includes>
|
||||||
</resource>
|
</resource>
|
||||||
</resources>
|
</resources>
|
||||||
</build>
|
</build>
|
||||||
|
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<maven.compiler.source>1.7</maven.compiler.source>
|
<maven.compiler.source>1.7</maven.compiler.source>
|
||||||
<maven.compiler.target>1.7</maven.compiler.target>
|
<maven.compiler.target>1.7</maven.compiler.target>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.comphenix.protocol</groupId>
|
<groupId>com.comphenix.protocol</groupId>
|
||||||
<artifactId>ProtocolLib</artifactId>
|
<artifactId>ProtocolLib</artifactId>
|
||||||
<version>4.2.0-SNAPSHOT</version>
|
<version>4.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.spigotmc</groupId>
|
<groupId>org.spigotmc</groupId>
|
||||||
<artifactId>spigot-api</artifactId>
|
<artifactId>spigot-api</artifactId>
|
||||||
<version>1.12-pre6-SNAPSHOT</version>
|
<version>1.12-pre6-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.spigotmc</groupId>
|
<groupId>org.spigotmc</groupId>
|
||||||
<artifactId>spigot</artifactId>
|
<artifactId>spigot</artifactId>
|
||||||
<version>1.12-pre6-SNAPSHOT</version>
|
<version>1.12-pre6-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<repositories>
|
<repositories>
|
||||||
<repository>
|
<repository>
|
||||||
<id>dmulloy2-repo</id>
|
<id>dmulloy2-repo</id>
|
||||||
<url>http://repo.dmulloy2.net/content/groups/public/</url>
|
<url>http://repo.dmulloy2.net/content/groups/public/</url>
|
||||||
</repository>
|
</repository>
|
||||||
<repository>
|
<repository>
|
||||||
<id>md_5-releases</id>
|
<id>md_5-releases</id>
|
||||||
<url>https://repo.md-5.net/content/repositories/releases/</url>
|
<url>https://repo.md-5.net/content/repositories/releases/</url>
|
||||||
</repository>
|
</repository>
|
||||||
<repository>
|
<repository>
|
||||||
<id>spigot-repo</id>
|
<id>spigot-repo</id>
|
||||||
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
|
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
|
||||||
</repository>
|
</repository>
|
||||||
</repositories>
|
</repositories>
|
||||||
|
|
||||||
<distributionManagement>
|
<distributionManagement>
|
||||||
<repository>
|
<repository>
|
||||||
<id>md_5-releases</id>
|
<id>md_5-releases</id>
|
||||||
<url>https://repo.md-5.net/content/repositories/releases/</url>
|
<url>https://repo.md-5.net/content/repositories/releases/</url>
|
||||||
</repository>
|
</repository>
|
||||||
<snapshotRepository>
|
<snapshotRepository>
|
||||||
<id>md_5-snapshots</id>
|
<id>md_5-snapshots</id>
|
||||||
<url>https://repo.md-5.net/content/repositories/snapshots/</url>
|
<url>https://repo.md-5.net/content/repositories/snapshots/</url>
|
||||||
</snapshotRepository>
|
</snapshotRepository>
|
||||||
</distributionManagement>
|
</distributionManagement>
|
||||||
</project>
|
</project>
|
@ -256,6 +256,7 @@ public class DisguiseAPI {
|
|||||||
for (String observer : ((TargetedDisguise) disguise).getObservers()) {
|
for (String observer : ((TargetedDisguise) disguise).getObservers()) {
|
||||||
((TargetedDisguise) disguise).removePlayer(observer);
|
((TargetedDisguise) disguise).removePlayer(observer);
|
||||||
}
|
}
|
||||||
|
|
||||||
disguiseEntity(entity, disguise);
|
disguiseEntity(entity, disguise);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@ import java.io.File;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
|
import me.libraryaddict.disguise.utilities.LibsPremium;
|
||||||
import me.libraryaddict.disguise.utilities.TranslateType;
|
import me.libraryaddict.disguise.utilities.TranslateType;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
@ -156,7 +157,8 @@ public class DisguiseConfig {
|
|||||||
setNameAboveHeadAlwaysVisible(config.getBoolean("NameAboveHeadAlwaysVisible"));
|
setNameAboveHeadAlwaysVisible(config.getBoolean("NameAboveHeadAlwaysVisible"));
|
||||||
setModifyBoundingBox(config.getBoolean("ModifyBoundingBox"));
|
setModifyBoundingBox(config.getBoolean("ModifyBoundingBox"));
|
||||||
setMonstersIgnoreDisguises(config.getBoolean("MonstersIgnoreDisguises"));
|
setMonstersIgnoreDisguises(config.getBoolean("MonstersIgnoreDisguises"));
|
||||||
setDisguiseBlownWhenAttacking(config.getBoolean("BlowDisguises", config.getBoolean("BlowDisguisesWhenAttacking")));
|
setDisguiseBlownWhenAttacking(
|
||||||
|
config.getBoolean("BlowDisguises", config.getBoolean("BlowDisguisesWhenAttacking")));
|
||||||
setDisguiseBlownWhenAttacked(config.getBoolean("BlowDisguisesWhenAttacked"));
|
setDisguiseBlownWhenAttacked(config.getBoolean("BlowDisguisesWhenAttacked"));
|
||||||
setKeepDisguiseOnPlayerDeath(config.getBoolean("KeepDisguises.PlayerDeath"));
|
setKeepDisguiseOnPlayerDeath(config.getBoolean("KeepDisguises.PlayerDeath"));
|
||||||
setMiscDisguisesForLivingEnabled(config.getBoolean("MiscDisguisesForLiving"));
|
setMiscDisguisesForLivingEnabled(config.getBoolean("MiscDisguisesForLiving"));
|
||||||
@ -186,6 +188,10 @@ public class DisguiseConfig {
|
|||||||
setSaveEntityDisguises(config.getBoolean("SaveDisguises.Entities"));
|
setSaveEntityDisguises(config.getBoolean("SaveDisguises.Entities"));
|
||||||
setUseTranslations(config.getBoolean("Translations"));
|
setUseTranslations(config.getBoolean("Translations"));
|
||||||
|
|
||||||
|
if (!LibsPremium.isPremium() && (isSavePlayerDisguises() || isSaveEntityDisguises())) {
|
||||||
|
System.out.println("[LibsDisguises] You must purchase the plugin to use saved disguises!");
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
String option = config.getString("SelfDisguisesScoreboard", DisguisePushing.MODIFY_SCOREBOARD.name())
|
String option = config.getString("SelfDisguisesScoreboard", DisguisePushing.MODIFY_SCOREBOARD.name())
|
||||||
.toUpperCase();
|
.toUpperCase();
|
||||||
|
@ -8,10 +8,7 @@ import com.comphenix.protocol.wrappers.EnumWrappers.PlayerInfoAction;
|
|||||||
import com.comphenix.protocol.wrappers.PlayerInfoData;
|
import com.comphenix.protocol.wrappers.PlayerInfoData;
|
||||||
import com.comphenix.protocol.wrappers.WrappedChatComponent;
|
import com.comphenix.protocol.wrappers.WrappedChatComponent;
|
||||||
import com.comphenix.protocol.wrappers.WrappedGameProfile;
|
import com.comphenix.protocol.wrappers.WrappedGameProfile;
|
||||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
|
import me.libraryaddict.disguise.disguisetypes.*;
|
||||||
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
|
|
||||||
import me.libraryaddict.disguise.disguisetypes.PlayerDisguise;
|
|
||||||
import me.libraryaddict.disguise.disguisetypes.TargetedDisguise;
|
|
||||||
import me.libraryaddict.disguise.disguisetypes.watchers.LivingWatcher;
|
import me.libraryaddict.disguise.disguisetypes.watchers.LivingWatcher;
|
||||||
import me.libraryaddict.disguise.utilities.DisguiseParser;
|
import me.libraryaddict.disguise.utilities.DisguiseParser;
|
||||||
import me.libraryaddict.disguise.utilities.DisguiseParser.DisguiseParseException;
|
import me.libraryaddict.disguise.utilities.DisguiseParser.DisguiseParseException;
|
||||||
@ -111,6 +108,8 @@ public class DisguiseListener implements Listener {
|
|||||||
if (disguises.length <= 0)
|
if (disguises.length <= 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
DisguiseUtilities.resetPluginTimer();
|
||||||
|
|
||||||
for (Disguise disguise : disguises) {
|
for (Disguise disguise : disguises) {
|
||||||
disguise.setEntity(entity);
|
disguise.setEntity(entity);
|
||||||
disguise.startDisguise();
|
disguise.startDisguise();
|
||||||
@ -248,6 +247,8 @@ public class DisguiseListener implements Listener {
|
|||||||
if (disguises.length <= 0)
|
if (disguises.length <= 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
DisguiseUtilities.resetPluginTimer();
|
||||||
|
|
||||||
for (Disguise disguise : disguises) {
|
for (Disguise disguise : disguises) {
|
||||||
disguise.setEntity(entity);
|
disguise.setEntity(entity);
|
||||||
disguise.startDisguise();
|
disguise.startDisguise();
|
||||||
@ -266,6 +267,8 @@ public class DisguiseListener implements Listener {
|
|||||||
if (disguises.length <= 0)
|
if (disguises.length <= 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
DisguiseUtilities.resetPluginTimer();
|
||||||
|
|
||||||
for (Disguise disguise : disguises) {
|
for (Disguise disguise : disguises) {
|
||||||
disguise.setEntity(entity);
|
disguise.setEntity(entity);
|
||||||
disguise.startDisguise();
|
disguise.startDisguise();
|
||||||
@ -297,6 +300,10 @@ public class DisguiseListener implements Listener {
|
|||||||
if (DisguiseConfig.isSavePlayerDisguises()) {
|
if (DisguiseConfig.isSavePlayerDisguises()) {
|
||||||
Disguise[] disguises = DisguiseUtilities.getSavedDisguises(p.getUniqueId(), true);
|
Disguise[] disguises = DisguiseUtilities.getSavedDisguises(p.getUniqueId(), true);
|
||||||
|
|
||||||
|
if (disguises.length > 0) {
|
||||||
|
DisguiseUtilities.resetPluginTimer();
|
||||||
|
}
|
||||||
|
|
||||||
for (Disguise disguise : disguises) {
|
for (Disguise disguise : disguises) {
|
||||||
disguise.setEntity(p);
|
disguise.setEntity(p);
|
||||||
disguise.startDisguise();
|
disguise.startDisguise();
|
||||||
@ -311,26 +318,6 @@ public class DisguiseListener implements Listener {
|
|||||||
if (!targetedDisguise.canSee(p))
|
if (!targetedDisguise.canSee(p))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// Don't need this as we have a packet listener doing that for us
|
|
||||||
/*if (targetedDisguise.isPlayerHiddenInTab() && targetedDisguise.getEntity() instanceof Player) {
|
|
||||||
try {
|
|
||||||
PacketContainer addTab = new PacketContainer(PacketType.Play.Server.PLAYER_INFO);
|
|
||||||
Player player = (Player) targetedDisguise.getEntity();
|
|
||||||
|
|
||||||
addTab.getPlayerInfoAction().write(0, PlayerInfoAction.REMOVE_PLAYER);
|
|
||||||
addTab.getPlayerInfoDataLists()
|
|
||||||
.write(0,
|
|
||||||
Arrays.asList(new PlayerInfoData(ReflectionManager.getGameProfile(player), 0,
|
|
||||||
NativeGameMode.SURVIVAL,
|
|
||||||
WrappedChatComponent.fromText(player.getDisplayName()))));
|
|
||||||
|
|
||||||
ProtocolLibrary.getProtocolManager().sendServerPacket(p, addTab);
|
|
||||||
}
|
|
||||||
catch (InvocationTargetException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
if (!(targetedDisguise instanceof PlayerDisguise))
|
if (!(targetedDisguise instanceof PlayerDisguise))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -1,48 +1,24 @@
|
|||||||
package me.libraryaddict.disguise;
|
package me.libraryaddict.disguise;
|
||||||
|
|
||||||
import java.io.File;
|
import com.comphenix.protocol.reflect.FieldAccessException;
|
||||||
import java.io.IOException;
|
import com.comphenix.protocol.wrappers.WrappedDataWatcher;
|
||||||
import java.lang.reflect.Field;
|
import com.comphenix.protocol.wrappers.WrappedWatchableObject;
|
||||||
import java.util.ArrayList;
|
import me.libraryaddict.disguise.commands.*;
|
||||||
|
import me.libraryaddict.disguise.disguisetypes.*;
|
||||||
import me.libraryaddict.disguise.disguisetypes.watchers.*;
|
import me.libraryaddict.disguise.disguisetypes.watchers.*;
|
||||||
import me.libraryaddict.disguise.utilities.*;
|
import me.libraryaddict.disguise.utilities.*;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.command.CommandExecutor;
|
import org.bukkit.command.CommandExecutor;
|
||||||
import org.bukkit.command.PluginCommand;
|
import org.bukkit.command.PluginCommand;
|
||||||
import org.bukkit.command.TabCompleter;
|
import org.bukkit.command.TabCompleter;
|
||||||
import org.bukkit.entity.Ageable;
|
import org.bukkit.entity.*;
|
||||||
import org.bukkit.entity.Creature;
|
|
||||||
import org.bukkit.entity.Damageable;
|
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
import org.bukkit.entity.LivingEntity;
|
|
||||||
import org.bukkit.entity.Tameable;
|
|
||||||
import org.bukkit.entity.Zombie;
|
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
import com.comphenix.protocol.reflect.FieldAccessException;
|
import java.io.File;
|
||||||
import com.comphenix.protocol.wrappers.WrappedDataWatcher;
|
import java.lang.reflect.Field;
|
||||||
import com.comphenix.protocol.wrappers.WrappedWatchableObject;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
import me.libraryaddict.disguise.commands.DisguiseCloneCommand;
|
import java.util.HashSet;
|
||||||
import me.libraryaddict.disguise.commands.DisguiseCommand;
|
|
||||||
import me.libraryaddict.disguise.commands.DisguiseEntityCommand;
|
|
||||||
import me.libraryaddict.disguise.commands.DisguiseHelpCommand;
|
|
||||||
import me.libraryaddict.disguise.commands.DisguiseModifyCommand;
|
|
||||||
import me.libraryaddict.disguise.commands.DisguiseModifyEntityCommand;
|
|
||||||
import me.libraryaddict.disguise.commands.DisguiseModifyPlayerCommand;
|
|
||||||
import me.libraryaddict.disguise.commands.DisguiseModifyRadiusCommand;
|
|
||||||
import me.libraryaddict.disguise.commands.DisguisePlayerCommand;
|
|
||||||
import me.libraryaddict.disguise.commands.DisguiseRadiusCommand;
|
|
||||||
import me.libraryaddict.disguise.commands.DisguiseViewSelfCommand;
|
|
||||||
import me.libraryaddict.disguise.commands.LibsDisguisesCommand;
|
|
||||||
import me.libraryaddict.disguise.commands.UndisguiseCommand;
|
|
||||||
import me.libraryaddict.disguise.commands.UndisguiseEntityCommand;
|
|
||||||
import me.libraryaddict.disguise.commands.UndisguisePlayerCommand;
|
|
||||||
import me.libraryaddict.disguise.commands.UndisguiseRadiusCommand;
|
|
||||||
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
|
|
||||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
|
||||||
import me.libraryaddict.disguise.disguisetypes.MetaIndex;
|
|
||||||
|
|
||||||
public class LibsDisguises extends JavaPlugin {
|
public class LibsDisguises extends JavaPlugin {
|
||||||
private static LibsDisguises instance;
|
private static LibsDisguises instance;
|
||||||
@ -50,16 +26,6 @@ public class LibsDisguises extends JavaPlugin {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
try {
|
|
||||||
Class.forName("com.comphenix.protocol.wrappers.Vector3F").getName();
|
|
||||||
}
|
|
||||||
catch (Exception ex) {
|
|
||||||
System.err.println("[LibsDisguises] Lib's Disguises failed to startup, outdated ProtocolLib!");
|
|
||||||
System.err.println(
|
|
||||||
"[LibsDisguises] You need to update ProtocolLib, please try this build http://ci.dmulloy2.net/job/ProtocolLib/lastStableBuild/artifact/modules/ProtocolLib/target/ProtocolLib.jar");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
instance = this;
|
instance = this;
|
||||||
saveDefaultConfig();
|
saveDefaultConfig();
|
||||||
|
|
||||||
@ -100,13 +66,114 @@ public class LibsDisguises extends JavaPlugin {
|
|||||||
registerCommand("disguisemodifyradius",
|
registerCommand("disguisemodifyradius",
|
||||||
new DisguiseModifyRadiusCommand(getConfig().getInt("DisguiseRadiusMax")));
|
new DisguiseModifyRadiusCommand(getConfig().getInt("DisguiseRadiusMax")));
|
||||||
|
|
||||||
try {
|
infectWithMetrics();
|
||||||
Metrics metrics = new Metrics(this);
|
}
|
||||||
metrics.start();
|
|
||||||
}
|
private void infectWithMetrics() {
|
||||||
catch (IOException e) {
|
Metrics metrics = new Metrics(this);
|
||||||
// Don't print error
|
|
||||||
}
|
final String premium = LibsPremium.isPremium() ?
|
||||||
|
getDescription().getVersion().contains("SNAPSHOT") ? "Paid Builds" : "Paid Plugin" : "Free Builds";
|
||||||
|
|
||||||
|
metrics.addCustomChart(new Metrics.SimplePie("premium") {
|
||||||
|
@Override
|
||||||
|
public String getValue() {
|
||||||
|
return premium;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
metrics.addCustomChart(new Metrics.SimplePie("translations") {
|
||||||
|
@Override
|
||||||
|
public String getValue() {
|
||||||
|
return LibsPremium.isPremium() && DisguiseConfig.isUseTranslations() ? "Yes" : "No";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
metrics.addCustomChart(new Metrics.SimplePie("custom_disguises") {
|
||||||
|
@Override
|
||||||
|
public String getValue() {
|
||||||
|
HashMap map = DisguiseConfig.getCustomDisguises();
|
||||||
|
|
||||||
|
return map.size() + (map.containsKey("libraryaddict") ? -1 : 0) > 0 ? "Yes" : "No";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
metrics.addCustomChart(new Metrics.MultiLineChart("disguised_entities") {
|
||||||
|
@Override
|
||||||
|
public HashMap<String, Integer> getValues(HashMap<String, Integer> hashMap) {
|
||||||
|
for (HashSet<TargetedDisguise> list : DisguiseUtilities.getDisguises().values()) {
|
||||||
|
for (Disguise disg : list) {
|
||||||
|
if (disg.getEntity() == null || !disg.isDisguiseInUse())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
String name = disg.getEntity().getType().name();
|
||||||
|
|
||||||
|
hashMap.put(name, hashMap.containsKey(name) ? hashMap.get(name) + 1 : 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return hashMap;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
metrics.addCustomChart(new Metrics.MultiLineChart("disguises_used") {
|
||||||
|
@Override
|
||||||
|
public HashMap<String, Integer> getValues(HashMap<String, Integer> hashMap) {
|
||||||
|
for (HashSet<TargetedDisguise> list : DisguiseUtilities.getDisguises().values()) {
|
||||||
|
for (Disguise disg : list) {
|
||||||
|
if (disg.getEntity() == null || !disg.isDisguiseInUse())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
String name = disg.getType().name();
|
||||||
|
|
||||||
|
hashMap.put(name, hashMap.containsKey(name) ? hashMap.get(name) + 1 : 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return hashMap;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
metrics.addCustomChart(new Metrics.SimplePie("disguised_with_commands") {
|
||||||
|
@Override
|
||||||
|
public String getValue() {
|
||||||
|
return DisguiseUtilities.isCommandsUsed() ? "Yes" : "No";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
metrics.addCustomChart(new Metrics.SimplePie("disguised_with_plugins") {
|
||||||
|
@Override
|
||||||
|
public String getValue() {
|
||||||
|
return DisguiseUtilities.isPluginsUsed() ? "Yes" : "No";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
metrics.addCustomChart(new Metrics.SimplePie("using_disguises") {
|
||||||
|
@Override
|
||||||
|
public String getValue() {
|
||||||
|
return !DisguiseUtilities.getDisguises().isEmpty() ? "Yes" : "No";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
metrics.addCustomChart(new Metrics.SimplePie("self_disguises") {
|
||||||
|
@Override
|
||||||
|
public String getValue() {
|
||||||
|
return DisguiseConfig.isViewDisguises() ? "Yes" : "No";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
metrics.addCustomChart(new Metrics.SimplePie("spigot") {
|
||||||
|
@Override
|
||||||
|
public String getValue() {
|
||||||
|
try {
|
||||||
|
Class.forName("org.spigotmc.SpigotConfig");
|
||||||
|
return "Yes";
|
||||||
|
}
|
||||||
|
catch (Exception ex) {
|
||||||
|
return "No";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -71,8 +71,6 @@ public abstract class Disguise {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Seems I do this method so I can make cleaner constructors on disguises..
|
* Seems I do this method so I can make cleaner constructors on disguises..
|
||||||
*
|
|
||||||
* @param newType The disguise
|
|
||||||
*/
|
*/
|
||||||
protected void createDisguise() {
|
protected void createDisguise() {
|
||||||
if (getType().getEntityType() == null) {
|
if (getType().getEntityType() == null) {
|
||||||
@ -234,7 +232,8 @@ public abstract class Disguise {
|
|||||||
|
|
||||||
int newFacing = (((int) loc.getYaw() + 720 + 45) / 90) % 4;
|
int newFacing = (((int) loc.getYaw() + 720 + 45) / 90) % 4;
|
||||||
|
|
||||||
if (loc.getBlockX() != blockX || loc.getBlockY() != blockY || loc.getBlockZ() != blockZ || newFacing != facing) {
|
if (loc.getBlockX() != blockX || loc.getBlockY() != blockY || loc
|
||||||
|
.getBlockZ() != blockZ || newFacing != facing) {
|
||||||
blockX = loc.getBlockX();
|
blockX = loc.getBlockX();
|
||||||
blockY = loc.getBlockY();
|
blockY = loc.getBlockY();
|
||||||
blockZ = loc.getBlockZ();
|
blockZ = loc.getBlockZ();
|
||||||
@ -260,7 +259,8 @@ public abstract class Disguise {
|
|||||||
// If the entity doesn't have velocity changes already - You know. I really can't wrap my head about the
|
// If the entity doesn't have velocity changes already - You know. I really can't wrap my head about the
|
||||||
// if statement.
|
// if statement.
|
||||||
// But it doesn't seem to do anything wrong..
|
// But it doesn't seem to do anything wrong..
|
||||||
if (vector.getY() != 0 && !(vector.getY() < 0 && alwaysSendVelocity && getEntity().isOnGround())) {
|
if (vector.getY() != 0 && !(vector.getY() < 0 && alwaysSendVelocity && getEntity()
|
||||||
|
.isOnGround())) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -268,7 +268,8 @@ public abstract class Disguise {
|
|||||||
if (getType() != DisguiseType.EXPERIENCE_ORB || !getEntity().isOnGround()) {
|
if (getType() != DisguiseType.EXPERIENCE_ORB || !getEntity().isOnGround()) {
|
||||||
PacketContainer lookPacket = null;
|
PacketContainer lookPacket = null;
|
||||||
|
|
||||||
if (getType() == DisguiseType.WITHER_SKULL && DisguiseConfig.isWitherSkullPacketsEnabled()) {
|
if (getType() == DisguiseType.WITHER_SKULL && DisguiseConfig
|
||||||
|
.isWitherSkullPacketsEnabled()) {
|
||||||
lookPacket = new PacketContainer(Server.ENTITY_LOOK);
|
lookPacket = new PacketContainer(Server.ENTITY_LOOK);
|
||||||
|
|
||||||
StructureModifier<Object> mods = lookPacket.getModifier();
|
StructureModifier<Object> mods = lookPacket.getModifier();
|
||||||
@ -277,8 +278,8 @@ public abstract class Disguise {
|
|||||||
|
|
||||||
mods.write(4, PacketsManager.getYaw(getType(), getEntity().getType(),
|
mods.write(4, PacketsManager.getYaw(getType(), getEntity().getType(),
|
||||||
(byte) Math.floor(loc.getYaw() * 256.0F / 360.0F)));
|
(byte) Math.floor(loc.getYaw() * 256.0F / 360.0F)));
|
||||||
mods.write(5,
|
mods.write(5, PacketsManager
|
||||||
PacketsManager.getPitch(getType(), DisguiseType.getType(getEntity().getType()),
|
.getPitch(getType(), DisguiseType.getType(getEntity().getType()),
|
||||||
(byte) Math.floor(loc.getPitch() * 256.0F / 360.0F)));
|
(byte) Math.floor(loc.getPitch() * 256.0F / 360.0F)));
|
||||||
|
|
||||||
if (isSelfDisguiseVisible() && getEntity() instanceof Player) {
|
if (isSelfDisguiseVisible() && getEntity() instanceof Player) {
|
||||||
@ -287,8 +288,8 @@ public abstract class Disguise {
|
|||||||
selfLookPacket.getIntegers().write(0, DisguiseAPI.getSelfDisguiseId());
|
selfLookPacket.getIntegers().write(0, DisguiseAPI.getSelfDisguiseId());
|
||||||
|
|
||||||
try {
|
try {
|
||||||
ProtocolLibrary.getProtocolManager().sendServerPacket((Player) getEntity(),
|
ProtocolLibrary.getProtocolManager()
|
||||||
selfLookPacket, false);
|
.sendServerPacket((Player) getEntity(), selfLookPacket, false);
|
||||||
}
|
}
|
||||||
catch (InvocationTargetException e) {
|
catch (InvocationTargetException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@ -319,12 +320,12 @@ public abstract class Disguise {
|
|||||||
(int) (8000D * (vectorY * ReflectionManager.getPing(player)) * 0.069D));
|
(int) (8000D * (vectorY * ReflectionManager.getPing(player)) * 0.069D));
|
||||||
|
|
||||||
if (lookPacket != null && player != getEntity()) {
|
if (lookPacket != null && player != getEntity()) {
|
||||||
ProtocolLibrary.getProtocolManager().sendServerPacket(player, lookPacket,
|
ProtocolLibrary.getProtocolManager()
|
||||||
false);
|
.sendServerPacket(player, lookPacket, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
ProtocolLibrary.getProtocolManager().sendServerPacket(player,
|
ProtocolLibrary.getProtocolManager()
|
||||||
velocityPacket.shallowClone(), false);
|
.sendServerPacket(player, velocityPacket.shallowClone(), false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
@ -348,8 +349,8 @@ public abstract class Disguise {
|
|||||||
selfPacket.getModifier().write(0, DisguiseAPI.getSelfDisguiseId());
|
selfPacket.getModifier().write(0, DisguiseAPI.getSelfDisguiseId());
|
||||||
|
|
||||||
try {
|
try {
|
||||||
ProtocolLibrary.getProtocolManager().sendServerPacket((Player) getEntity(),
|
ProtocolLibrary.getProtocolManager()
|
||||||
selfPacket, false);
|
.sendServerPacket((Player) getEntity(), selfPacket, false);
|
||||||
}
|
}
|
||||||
catch (InvocationTargetException e) {
|
catch (InvocationTargetException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@ -683,8 +684,8 @@ public abstract class Disguise {
|
|||||||
*/
|
*/
|
||||||
private void setupWatcher() {
|
private void setupWatcher() {
|
||||||
ArrayList<MetaIndex> disguiseFlags = MetaIndex.getFlags(getType().getWatcherClass());
|
ArrayList<MetaIndex> disguiseFlags = MetaIndex.getFlags(getType().getWatcherClass());
|
||||||
ArrayList<MetaIndex> entityFlags = MetaIndex.getFlags(
|
ArrayList<MetaIndex> entityFlags = MetaIndex
|
||||||
DisguiseType.getType(getEntity().getType()).getWatcherClass());
|
.getFlags(DisguiseType.getType(getEntity().getType()).getWatcherClass());
|
||||||
|
|
||||||
for (MetaIndex flag : entityFlags) {
|
for (MetaIndex flag : entityFlags) {
|
||||||
if (disguiseFlags.contains(flag))
|
if (disguiseFlags.contains(flag))
|
||||||
@ -736,7 +737,8 @@ public abstract class Disguise {
|
|||||||
public Disguise setWatcher(FlagWatcher newWatcher) {
|
public Disguise setWatcher(FlagWatcher newWatcher) {
|
||||||
if (!getType().getWatcherClass().isInstance(newWatcher)) {
|
if (!getType().getWatcherClass().isInstance(newWatcher)) {
|
||||||
throw new IllegalArgumentException(
|
throw new IllegalArgumentException(
|
||||||
newWatcher.getClass().getSimpleName() + " is not a instance of " + getType().getWatcherClass().getSimpleName() + " for DisguiseType " + getType().name());
|
newWatcher.getClass().getSimpleName() + " is not a instance of " + getType().getWatcherClass()
|
||||||
|
.getSimpleName() + " for DisguiseType " + getType().name());
|
||||||
}
|
}
|
||||||
|
|
||||||
watcher = newWatcher;
|
watcher = newWatcher;
|
||||||
@ -749,78 +751,47 @@ public abstract class Disguise {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean startDisguise() {
|
public boolean startDisguise() {
|
||||||
if (!isDisguiseInUse()) {
|
if (isDisguiseInUse()) {
|
||||||
if (getEntity() == null) {
|
return false;
|
||||||
throw new RuntimeException("No entity is assigned to this disguise!");
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Fire a disguise event
|
if (getEntity() == null) {
|
||||||
DisguiseEvent event = new DisguiseEvent(entity, this);
|
throw new RuntimeException("No entity is assigned to this disguise!");
|
||||||
|
}
|
||||||
|
|
||||||
Bukkit.getPluginManager().callEvent(event);
|
DisguiseUtilities.setPluginsUsed();
|
||||||
|
|
||||||
// If they cancelled this disguise event. No idea why.
|
// Fire a disguise event
|
||||||
// Just return.
|
DisguiseEvent event = new DisguiseEvent(entity, this);
|
||||||
if (event.isCancelled()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
disguiseInUse = true;
|
Bukkit.getPluginManager().
|
||||||
|
callEvent(event);
|
||||||
|
|
||||||
if (velocityRunnable == null) {
|
// If they cancelled this disguise event. No idea why.
|
||||||
createRunnable();
|
// Just return.
|
||||||
}
|
if (event.isCancelled()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
task = Bukkit.getScheduler().runTaskTimer(LibsDisguises.getInstance(), velocityRunnable, 1, 1);
|
disguiseInUse = true;
|
||||||
|
|
||||||
if (this instanceof PlayerDisguise) {
|
if (velocityRunnable == null) {
|
||||||
PlayerDisguise disguise = (PlayerDisguise) this;
|
createRunnable();
|
||||||
|
}
|
||||||
|
|
||||||
if (disguise.isDisplayedInTab()) {
|
task = Bukkit.getScheduler().
|
||||||
PacketContainer addTab = new PacketContainer(PacketType.Play.Server.PLAYER_INFO);
|
|
||||||
addTab.getPlayerInfoAction().write(0, PlayerInfoAction.ADD_PLAYER);
|
|
||||||
addTab.getPlayerInfoDataLists().write(0, Arrays.asList(
|
|
||||||
new PlayerInfoData(disguise.getGameProfile(), 0, NativeGameMode.SURVIVAL,
|
|
||||||
WrappedChatComponent.fromText(disguise.getName()))));
|
|
||||||
|
|
||||||
try {
|
runTaskTimer(LibsDisguises.getInstance(), velocityRunnable, 1, 1);
|
||||||
for (Player player : Bukkit.getOnlinePlayers()) {
|
|
||||||
if (!((TargetedDisguise) this).canSee(player))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
ProtocolLibrary.getProtocolManager().sendServerPacket(player, addTab);
|
if (this instanceof PlayerDisguise) {
|
||||||
}
|
PlayerDisguise disguise = (PlayerDisguise) this;
|
||||||
}
|
|
||||||
catch (InvocationTargetException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Stick the disguise in the disguises bin
|
if (disguise.isDisplayedInTab()) {
|
||||||
DisguiseUtilities.addDisguise(entity.getUniqueId(), (TargetedDisguise) this);
|
|
||||||
|
|
||||||
if (isSelfDisguiseVisible() && getEntity() instanceof Player) {
|
|
||||||
DisguiseUtilities.removeSelfDisguise((Player) getEntity());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Resend the disguised entity's packet
|
|
||||||
DisguiseUtilities.refreshTrackers((TargetedDisguise) this);
|
|
||||||
|
|
||||||
// If he is a player, then self disguise himself
|
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(LibsDisguises.getInstance(), new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
DisguiseUtilities.setupFakeDisguise(Disguise.this);
|
|
||||||
}
|
|
||||||
}, 2);
|
|
||||||
|
|
||||||
if (isHidePlayer() && getEntity() instanceof Player) {
|
|
||||||
PacketContainer addTab = new PacketContainer(PacketType.Play.Server.PLAYER_INFO);
|
PacketContainer addTab = new PacketContainer(PacketType.Play.Server.PLAYER_INFO);
|
||||||
addTab.getPlayerInfoAction().write(0, PlayerInfoAction.REMOVE_PLAYER);
|
addTab.getPlayerInfoAction().write(0, PlayerInfoAction.ADD_PLAYER);
|
||||||
addTab.getPlayerInfoDataLists().write(0, Arrays.asList(
|
addTab.getPlayerInfoDataLists().write(0, Arrays.asList(
|
||||||
new PlayerInfoData(ReflectionManager.getGameProfile((Player) getEntity()), 0,
|
new PlayerInfoData(disguise.getGameProfile(), 0, NativeGameMode.SURVIVAL,
|
||||||
NativeGameMode.SURVIVAL, WrappedChatComponent.fromText(""))));
|
WrappedChatComponent.fromText(disguise.getName()))));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
for (Player player : Bukkit.getOnlinePlayers()) {
|
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||||
@ -834,14 +805,51 @@ public abstract class Disguise {
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
// Stick the disguise in the disguises bin
|
||||||
|
DisguiseUtilities.addDisguise(entity.getUniqueId(), (TargetedDisguise) this);
|
||||||
|
|
||||||
|
if (isSelfDisguiseVisible() && getEntity() instanceof Player) {
|
||||||
|
DisguiseUtilities.removeSelfDisguise((Player) getEntity());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Resend the disguised entity's packet
|
||||||
|
DisguiseUtilities.refreshTrackers((TargetedDisguise) this);
|
||||||
|
|
||||||
|
// If he is a player, then self disguise himself
|
||||||
|
Bukkit.getScheduler().
|
||||||
|
scheduleSyncDelayedTask(LibsDisguises.getInstance(), new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
DisguiseUtilities.setupFakeDisguise(Disguise.this);
|
||||||
|
}
|
||||||
|
}, 2);
|
||||||
|
|
||||||
|
if (isHidePlayer() && getEntity() instanceof Player) {
|
||||||
|
PacketContainer addTab = new PacketContainer(PacketType.Play.Server.PLAYER_INFO);
|
||||||
|
addTab.getPlayerInfoAction().write(0, PlayerInfoAction.REMOVE_PLAYER);
|
||||||
|
addTab.getPlayerInfoDataLists().write(0, Arrays.asList(
|
||||||
|
new PlayerInfoData(ReflectionManager.getGameProfile((Player) getEntity()), 0,
|
||||||
|
NativeGameMode.SURVIVAL, WrappedChatComponent.fromText(""))));
|
||||||
|
|
||||||
|
try {
|
||||||
|
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||||
|
if (!((TargetedDisguise) this).canSee(player))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
ProtocolLibrary.getProtocolManager().sendServerPacket(player, addTab);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (InvocationTargetException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean stopDisguise() {
|
public boolean stopDisguise() {
|
||||||
return removeDisguise();
|
return removeDisguise();
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -453,6 +453,10 @@ public class DisguiseParser {
|
|||||||
*/
|
*/
|
||||||
public static Disguise parseDisguise(CommandSender sender, String permNode, String[] args,
|
public static Disguise parseDisguise(CommandSender sender, String permNode, String[] args,
|
||||||
HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> permissionMap) throws DisguiseParseException, IllegalAccessException, InvocationTargetException {
|
HashMap<DisguisePerm, HashMap<ArrayList<String>, Boolean>> permissionMap) throws DisguiseParseException, IllegalAccessException, InvocationTargetException {
|
||||||
|
if (sender instanceof Player) {
|
||||||
|
DisguiseUtilities.setCommandsUsed();
|
||||||
|
}
|
||||||
|
|
||||||
if (permissionMap.isEmpty()) {
|
if (permissionMap.isEmpty()) {
|
||||||
throw new DisguiseParseException(LibsMsg.NO_PERM);
|
throw new DisguiseParseException(LibsMsg.NO_PERM);
|
||||||
}
|
}
|
||||||
|
@ -74,6 +74,33 @@ public class DisguiseUtilities {
|
|||||||
"plugins/LibsDisguises/SavedDisguises");
|
"plugins/LibsDisguises/SavedDisguises");
|
||||||
private static Gson gson;
|
private static Gson gson;
|
||||||
private static BackwardMethods methods;
|
private static BackwardMethods methods;
|
||||||
|
private static boolean pluginsUsed, commandsUsed;
|
||||||
|
private static long libsDisguisesCalled;
|
||||||
|
|
||||||
|
public static void setPluginsUsed() {
|
||||||
|
if (libsDisguisesCalled > System.currentTimeMillis()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
pluginsUsed = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void resetPluginTimer() {
|
||||||
|
libsDisguisesCalled = System.currentTimeMillis() + 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setCommandsUsed() {
|
||||||
|
resetPluginTimer();
|
||||||
|
commandsUsed = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isPluginsUsed() {
|
||||||
|
return pluginsUsed;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isCommandsUsed() {
|
||||||
|
return commandsUsed;
|
||||||
|
}
|
||||||
|
|
||||||
public static void saveDisguises() {
|
public static void saveDisguises() {
|
||||||
for (HashSet<TargetedDisguise> list : disguisesInUse.values()) {
|
for (HashSet<TargetedDisguise> list : disguisesInUse.values()) {
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -33,6 +33,10 @@ public enum TranslateType {
|
|||||||
type.reload();
|
type.reload();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!LibsPremium.isPremium() && DisguiseConfig.isUseTranslations()) {
|
||||||
|
System.out.println("[LibsDisguises] You must purchase the plugin to use translations!");
|
||||||
|
}
|
||||||
|
|
||||||
TranslateFiller.fillConfigs();
|
TranslateFiller.fillConfigs();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,14 +15,18 @@ public class BackwardsSupport {
|
|||||||
public static BackwardMethods getMethods() {
|
public static BackwardMethods getMethods() {
|
||||||
try {
|
try {
|
||||||
String version = ReflectionManager.getBukkitVersion();
|
String version = ReflectionManager.getBukkitVersion();
|
||||||
|
Class<? extends BackwardMethods> methods = BackwardMethods.class;
|
||||||
|
|
||||||
if (LibsPremium.isPremium()) {
|
if (version.equals("v1_11_R1")) {
|
||||||
if (version.equals("v1_11_R1")) {
|
methods = Version_1_11.class;
|
||||||
return setupMetadata(Version_1_11.class);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return setupMetadata(BackwardMethods.class);
|
if (!LibsPremium.isPremium() && methods != BackwardMethods.class) {
|
||||||
|
System.out.println("[LibsDisguises] You must purchase the plugin to use backwards compatibility!");
|
||||||
|
methods = BackwardMethods.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
return setupMetadata(methods);
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
Loading…
Reference in New Issue
Block a user