Fixed Shulker disguises

Fixed Enderdragon direction
Added config option to stop shulker disguises from moving
Fixed sleeping while in a player disguise
This commit is contained in:
NavidK0 2016-03-15 16:07:22 -04:00
parent 75fb4f2e53
commit f30f5dfcf2
7 changed files with 35 additions and 23 deletions

View File

@ -1,7 +1,6 @@
package me.libraryaddict.disguise; package me.libraryaddict.disguise;
import me.libraryaddict.disguise.utilities.PacketsManager; import me.libraryaddict.disguise.utilities.PacketsManager;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.ConfigurationSection;
@ -37,6 +36,7 @@ public class DisguiseConfig {
private static boolean showNameAboveHeadAlwaysVisible; private static boolean showNameAboveHeadAlwaysVisible;
private static boolean targetDisguises; private static boolean targetDisguises;
private static boolean undisguiseSwitchWorlds; private static boolean undisguiseSwitchWorlds;
private static boolean stopShulkerDisguisesFromMoving;
private static String updateMessage = ChatColor.RED + "[LibsDisguises] " + ChatColor.DARK_RED private static String updateMessage = ChatColor.RED + "[LibsDisguises] " + ChatColor.DARK_RED
+ "There is a update ready to be downloaded! You are using " + ChatColor.RED + "v%s" + ChatColor.DARK_RED + "There is a update ready to be downloaded! You are using " + ChatColor.RED + "v%s" + ChatColor.DARK_RED
+ ", the new version is " + ChatColor.RED + "%s" + ChatColor.DARK_RED + "!"; + ", the new version is " + ChatColor.RED + "%s" + ChatColor.DARK_RED + "!";
@ -102,6 +102,7 @@ public class DisguiseConfig {
setWolfDyeable(config.getBoolean("DyeableWolf")); setWolfDyeable(config.getBoolean("DyeableWolf"));
setUndisguiseOnWorldChange(config.getBoolean("UndisguiseOnWorldChange")); setUndisguiseOnWorldChange(config.getBoolean("UndisguiseOnWorldChange"));
setUpdateNotificationPermission(config.getString("Permission")); setUpdateNotificationPermission(config.getString("Permission"));
setStopShulkerDisguisesFromMoving(config.getBoolean("StopShulkerDisguisesFromMoving", true));
} }
public static boolean isAnimationPacketsEnabled() { public static boolean isAnimationPacketsEnabled() {
@ -409,6 +410,14 @@ public class DisguiseConfig {
updateNotificationPermission = newPermission; updateNotificationPermission = newPermission;
} }
public static void setStopShulkerDisguisesFromMoving(boolean stopShulkerDisguisesFromMoving) {
DisguiseConfig.stopShulkerDisguisesFromMoving = stopShulkerDisguisesFromMoving;
}
public static boolean isStopShulkerDisguisesFromMoving() {
return stopShulkerDisguisesFromMoving;
}
/** /**
* Disable velocity packets being sent for w/e reason. Maybe you want every ounce of performance you can get? * Disable velocity packets being sent for w/e reason. Maybe you want every ounce of performance you can get?
* *

View File

@ -172,6 +172,19 @@ public class DisguiseListener implements Listener {
chunkMove(event.getPlayer(), to, from); chunkMove(event.getPlayer(), to, from);
} }
} }
if (DisguiseConfig.isStopShulkerDisguisesFromMoving()) {
Disguise disguise;
if ((disguise = DisguiseAPI.getDisguise(event.getPlayer())) != null) {
if (disguise.getType() == DisguiseType.SHULKER) { //Stop Shulker disguises from moving their coordinates
Location from = event.getFrom();
Location to = event.getTo();
to.setX(from.getX());
to.setZ(from.getZ());
event.setTo(to);
}
}
}
} }
@EventHandler @EventHandler

View File

@ -262,7 +262,8 @@ public class FlagWatcher {
if (isEntityAnimationsAdded() && DisguiseConfig.isMetadataPacketsEnabled() && data == 0) { if (isEntityAnimationsAdded() && DisguiseConfig.isMetadataPacketsEnabled() && data == 0) {
if (disguise.getType() != DisguiseType.WOLF && if (disguise.getType() != DisguiseType.WOLF &&
disguise.getType() != DisguiseType.OCELOT && disguise.getType() != DisguiseType.OCELOT &&
disguise.getType() != DisguiseType.ENDERMAN) disguise.getType() != DisguiseType.ENDERMAN &&
disguise.getType() != DisguiseType.SHULKER)
value = addEntityAnimations((byte) value, WrappedDataWatcher.getEntityWatcher(disguise.getEntity()).getByte(0)); value = addEntityAnimations((byte) value, WrappedDataWatcher.getEntityWatcher(disguise.getEntity()).getByte(0));
} }
WrappedWatchableObject watch = new WrappedWatchableObject(ReflectionManager.createDataWatcherItem(data, value)); WrappedWatchableObject watch = new WrappedWatchableObject(ReflectionManager.createDataWatcherItem(data, value));

View File

@ -700,7 +700,6 @@ public class DisguiseUtilities {
/** /**
* Resends the entity to all the watching players, which is where the magic begins * Resends the entity to all the watching players, which is where the magic begins
*/ */
//TODO: Check this method, something's not right here
public static void refreshTrackers(final TargetedDisguise disguise) { public static void refreshTrackers(final TargetedDisguise disguise) {
if (disguise.getEntity().isValid()) { if (disguise.getEntity().isValid()) {
PacketContainer destroyPacket = getDestroyPacket(disguise.getEntity().getEntityId()); PacketContainer destroyPacket = getDestroyPacket(disguise.getEntity().getEntityId());
@ -947,8 +946,8 @@ public class DisguiseUtilities {
if (player.isSleeping()) { if (player.isSleeping()) {
sendSelfPacket( sendSelfPacket(
player, player,
manager.createPacketConstructor(Server.BED, player, loc.getBlockX(), loc.getBlockY(), manager.createPacketConstructor(Server.BED, player, ReflectionManager.getBlockPosition(0, 0, 0))
loc.getBlockZ()).createPacket(player, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ())); .createPacket(player, ReflectionManager.getBlockPosition(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ())));
} }
// Resend any active potion effects // Resend any active potion effects

View File

@ -401,8 +401,7 @@ public class PacketsManager {
value += 64; value += 64;
break; break;
case ENDER_DRAGON: case ENDER_DRAGON:
//TODO: Enderdragon direction is... weird, consistently backwards value -= 128;
// value = (byte) (~value & 0xff);
break; break;
case WITHER_SKULL: case WITHER_SKULL:
value -= 128; value -= 128;
@ -831,8 +830,6 @@ public class PacketsManager {
|| event.getPacketType() == Server.ENTITY_EFFECT || event.getPacketType() == Server.ENTITY_EFFECT
|| event.getPacketType() == Server.ENTITY_EQUIPMENT) { || event.getPacketType() == Server.ENTITY_EQUIPMENT) {
event.setCancelled(true); event.setCancelled(true);
} else if (event.getPacketType() == Server.BED) {
ReflectionManager.setAllowSleep(observer);
} else if (event.getPacketType() == Server.ENTITY_STATUS) { } else if (event.getPacketType() == Server.ENTITY_STATUS) {
Disguise disguise = DisguiseAPI.getDisguise(event.getPlayer(), event.getPlayer()); Disguise disguise = DisguiseAPI.getDisguise(event.getPlayer(), event.getPlayer());
if (disguise.isSelfDisguiseSoundsReplaced() && !disguise.getType().isPlayer() if (disguise.isSelfDisguiseSoundsReplaced() && !disguise.getType().isPlayer()
@ -1300,7 +1297,8 @@ public class PacketsManager {
else if (sentPacket.getType() == Server.ENTITY_METADATA) { else if (sentPacket.getType() == Server.ENTITY_METADATA) {
if (DisguiseConfig.isMetadataPacketsEnabled() && (disguise.getType() != DisguiseType.WOLF && if (DisguiseConfig.isMetadataPacketsEnabled() && (disguise.getType() != DisguiseType.WOLF &&
disguise.getType() != DisguiseType.OCELOT && disguise.getType() != DisguiseType.OCELOT &&
disguise.getType() != DisguiseType.ENDERMAN)) { disguise.getType() != DisguiseType.ENDERMAN &&
disguise.getType() != DisguiseType.SHULKER)) {
List<WrappedWatchableObject> watchableObjects = disguise.getWatcher().convert( List<WrappedWatchableObject> watchableObjects = disguise.getWatcher().convert(
packets[0].getWatchableCollectionModifier().read(0)); packets[0].getWatchableCollectionModifier().read(0));
packets[0] = new PacketContainer(sentPacket.getType()); packets[0] = new PacketContainer(sentPacket.getType());
@ -1414,7 +1412,8 @@ public class PacketsManager {
List<WrappedWatchableObject> list = new ArrayList<>(); List<WrappedWatchableObject> list = new ArrayList<>();
if (DisguiseConfig.isMetadataPacketsEnabled() && (disguise.getType() != DisguiseType.WOLF && if (DisguiseConfig.isMetadataPacketsEnabled() && (disguise.getType() != DisguiseType.WOLF &&
disguise.getType() != DisguiseType.OCELOT && disguise.getType() != DisguiseType.OCELOT &&
disguise.getType() != DisguiseType.ENDERMAN)) { disguise.getType() != DisguiseType.ENDERMAN &&
disguise.getType() != DisguiseType.SHULKER)) {
WrappedWatchableObject watch = new WrappedWatchableObject(ReflectionManager.createDataWatcherItem(0, WrappedWatchableObject watch = new WrappedWatchableObject(ReflectionManager.createDataWatcherItem(0,
WrappedDataWatcher.getEntityWatcher(entity).getByte(0))); WrappedDataWatcher.getEntityWatcher(entity).getByte(0)));
list.add(watch); list.add(watch);

View File

@ -496,18 +496,6 @@ public class ReflectionManager {
//Some future remove code if needed //Some future remove code if needed
} }
public static void setAllowSleep(Player player) {
try {
//TODO: Fix this!
/**
* Object nmsEntity = getNmsEntity(player); Object connection = getNmsField(nmsEntity.getClass(), "playerConnection").get(nmsEntity); Field check = getNmsField(connection.getClass(), "checkMovement"); check.setBoolean(connection, true); *
*/
} catch (Exception ex) {
ex.printStackTrace(System.out);
}
}
public static void setBoundingBox(Entity entity, FakeBoundingBox newBox) { public static void setBoundingBox(Entity entity, FakeBoundingBox newBox) {
try { try {
Location loc = entity.getLocation(); Location loc = entity.getLocation();

View File

@ -60,6 +60,9 @@ MonstersIgnoreDisguises: false
BlowDisguises: false BlowDisguises: false
BlownDisguiseMessage: '&cYour disguise was blown!' BlownDisguiseMessage: '&cYour disguise was blown!'
#Stop shulker disguises from moving, they're weird. This option only effects PLAYERS that are disguised, other entities disguised as shulkers will NOT be effected!
StopShulkerDisguisesFromMoving: true
# A option to choose how many seconds a DisguiseEntity command is valid for people to right click a entity to disguise it before expiring # A option to choose how many seconds a DisguiseEntity command is valid for people to right click a entity to disguise it before expiring
DisguiseEntityExpire: 10 DisguiseEntityExpire: 10