Fix isRightClicking() and add isSpinning()
This commit is contained in:
parent
8e2645501b
commit
30cc40a6a3
@ -18,6 +18,7 @@ import me.libraryaddict.disguise.LibsDisguises;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
import me.libraryaddict.disguise.utilities.parser.RandomDefaultValue;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsRemovedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
import me.libraryaddict.disguise.utilities.reflection.ReflectionManager;
|
||||
import net.md_5.bungee.api.chat.BaseComponent;
|
||||
@ -52,7 +53,6 @@ public class FlagWatcher {
|
||||
private boolean[] modifiedEntityAnimations = new boolean[8];
|
||||
private transient List<WrappedWatchableObject> watchableObjects;
|
||||
private boolean sleeping;
|
||||
private boolean swimming;
|
||||
private transient boolean previouslySneaking;
|
||||
@Getter
|
||||
private boolean upsideDown;
|
||||
@ -88,7 +88,6 @@ public class FlagWatcher {
|
||||
cloned.modifiedEntityAnimations = Arrays.copyOf(modifiedEntityAnimations, modifiedEntityAnimations.length);
|
||||
cloned.addEntityAnimations = addEntityAnimations;
|
||||
cloned.upsideDown = upsideDown;
|
||||
cloned.swimming = swimming;
|
||||
cloned.sleeping = sleeping;
|
||||
|
||||
return cloned;
|
||||
@ -559,11 +558,17 @@ public class FlagWatcher {
|
||||
sendData(MetaIndex.ENTITY_NO_GRAVITY);
|
||||
}
|
||||
|
||||
//@NmsRemovedIn(val = NmsVersion.v1_13)
|
||||
public boolean isRightClicking() {
|
||||
return getEntityFlag(4);
|
||||
return !NmsVersion.v1_13.isSupported() && getEntityFlag(4);
|
||||
}
|
||||
|
||||
//@NmsRemovedIn(val = NmsVersion.v1_13)
|
||||
public void setRightClicking(boolean setRightClicking) {
|
||||
if (NmsVersion.v1_13.isSupported()) {
|
||||
return;
|
||||
}
|
||||
|
||||
setEntityFlag(4, setRightClicking);
|
||||
sendData(MetaIndex.ENTITY_META);
|
||||
}
|
||||
@ -796,7 +801,7 @@ public class FlagWatcher {
|
||||
|
||||
@NmsAddedIn(val = NmsVersion.v1_14)
|
||||
public boolean isSwimming() {
|
||||
return swimming;
|
||||
return getEntityFlag(4);
|
||||
}
|
||||
|
||||
@NmsAddedIn(val = NmsVersion.v1_14)
|
||||
@ -805,7 +810,7 @@ public class FlagWatcher {
|
||||
return;
|
||||
}
|
||||
|
||||
this.swimming = swimming;
|
||||
setEntityFlag(4, swimming);
|
||||
|
||||
updatePose();
|
||||
}
|
||||
|
@ -17,7 +17,6 @@ public class InsentientWatcher extends LivingWatcher {
|
||||
|
||||
public void setMainHand(MainHand mainHand) {
|
||||
setInsentientFlag(2, mainHand == MainHand.RIGHT);
|
||||
sendData(MetaIndex.INSENTIENT_META);
|
||||
}
|
||||
|
||||
public boolean isAI() {
|
||||
@ -26,7 +25,6 @@ public class InsentientWatcher extends LivingWatcher {
|
||||
|
||||
public void setAI(boolean ai) {
|
||||
setInsentientFlag(1, ai);
|
||||
sendData(MetaIndex.INSENTIENT_META);
|
||||
}
|
||||
|
||||
private void setInsentientFlag(int i, boolean flag) {
|
||||
@ -37,6 +35,8 @@ public class InsentientWatcher extends LivingWatcher {
|
||||
} else {
|
||||
setData(MetaIndex.INSENTIENT_META, (byte) (b0 & i));
|
||||
}
|
||||
|
||||
sendData(MetaIndex.INSENTIENT_META);
|
||||
}
|
||||
|
||||
private boolean getInsentientFlag(int i) {
|
||||
@ -51,6 +51,5 @@ public class InsentientWatcher extends LivingWatcher {
|
||||
@NmsAddedIn(val = NmsVersion.v1_14)
|
||||
public void setEnraged(boolean enraged) {
|
||||
setInsentientFlag(4, enraged);
|
||||
sendData(MetaIndex.INSENTIENT_META);
|
||||
}
|
||||
}
|
||||
|
@ -4,6 +4,7 @@ import com.comphenix.protocol.PacketType.Play.Server;
|
||||
import com.comphenix.protocol.ProtocolLibrary;
|
||||
import com.comphenix.protocol.events.PacketContainer;
|
||||
import com.comphenix.protocol.wrappers.BlockPosition;
|
||||
import com.comphenix.protocol.wrappers.EnumWrappers;
|
||||
import com.comphenix.protocol.wrappers.WrappedAttribute;
|
||||
import com.comphenix.protocol.wrappers.WrappedAttribute.Builder;
|
||||
import me.libraryaddict.disguise.DisguiseAPI;
|
||||
@ -11,11 +12,13 @@ import me.libraryaddict.disguise.disguisetypes.Disguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
|
||||
import me.libraryaddict.disguise.disguisetypes.MetaIndex;
|
||||
import me.libraryaddict.disguise.utilities.DisguiseUtilities;
|
||||
import me.libraryaddict.disguise.utilities.parser.RandomDefaultValue;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsAddedIn;
|
||||
import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
|
||||
import org.bukkit.Color;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.MainHand;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
@ -68,6 +71,52 @@ public class LivingWatcher extends FlagWatcher {
|
||||
sendData(MetaIndex.LIVING_HEALTH);
|
||||
}
|
||||
|
||||
/*@NmsAddedIn(val = NmsVersion.v1_13)
|
||||
public MainHand getMainHand() {
|
||||
return getHandFlag(0) ? MainHand.RIGHT : MainHand.LEFT;
|
||||
}
|
||||
|
||||
@NmsAddedIn(val = NmsVersion.v1_13)
|
||||
public void setMainHand(MainHand hand) {
|
||||
setHandFlag(0, hand == MainHand.RIGHT);
|
||||
}*/
|
||||
|
||||
private boolean getHandFlag(int byteValue) {
|
||||
return (getData(MetaIndex.LIVING_HAND) & 1 << byteValue) != 0;
|
||||
}
|
||||
|
||||
private void setHandFlag(int byteValue, boolean flag) {
|
||||
byte b0 = getData(MetaIndex.LIVING_HAND);
|
||||
|
||||
if (flag) {
|
||||
setData(MetaIndex.LIVING_HAND, (byte) (b0 | 1 << byteValue));
|
||||
} else {
|
||||
setData(MetaIndex.LIVING_HAND, (byte) (b0 & ~(1 << byteValue)));
|
||||
}
|
||||
|
||||
sendData(MetaIndex.LIVING_HAND);
|
||||
}
|
||||
|
||||
@NmsAddedIn(val = NmsVersion.v1_13)
|
||||
public boolean isRightClicking() {
|
||||
return getHandFlag(0);
|
||||
}
|
||||
|
||||
@NmsAddedIn(val = NmsVersion.v1_13)
|
||||
public void setRightClicking(boolean setRightClicking) {
|
||||
setHandFlag(0, setRightClicking);
|
||||
}
|
||||
|
||||
@NmsAddedIn(val = NmsVersion.v1_13)
|
||||
public boolean isSpinning() {
|
||||
return getHandFlag(2);
|
||||
}
|
||||
|
||||
@NmsAddedIn(val = NmsVersion.v1_13)
|
||||
public void setSpinning(boolean setSpinning) {
|
||||
setHandFlag(2, setSpinning);
|
||||
}
|
||||
|
||||
public double getMaxHealth() {
|
||||
return maxHealth;
|
||||
}
|
||||
|
@ -84,16 +84,17 @@ public class PacketHandlerEquipment implements IPacketHandler {
|
||||
newSlots.add(pair);
|
||||
}
|
||||
|
||||
if (disguise.getWatcher().isRightClicking() && slot == EquipmentSlot.HAND) {
|
||||
ItemStack heldItem = packets.getPackets().get(0).getItemModifier().read(0);
|
||||
if (disguise.getWatcher().isRightClicking() &&
|
||||
(slot == EquipmentSlot.HAND || slot == EquipmentSlot.OFF_HAND)) {
|
||||
itemStack = ReflectionManager.getBukkitItem(pair.getSecond());
|
||||
|
||||
if (heldItem != null && heldItem.getType() != Material.AIR) {
|
||||
if (itemStack != null && itemStack.getType() != Material.AIR) {
|
||||
// Convert the datawatcher
|
||||
List<WrappedWatchableObject> list = new ArrayList<>();
|
||||
|
||||
if (DisguiseConfig.isMetaPacketsEnabled()) {
|
||||
WrappedWatchableObject watch = ReflectionManager.createWatchable(MetaIndex.ENTITY_META,
|
||||
WrappedDataWatcher.getEntityWatcher(entity).getByte(0));
|
||||
WrappedWatchableObject watch = ReflectionManager.createWatchable(MetaIndex.LIVING_HAND,
|
||||
WrappedDataWatcher.getEntityWatcher(entity).getByte(MetaIndex.LIVING_HAND.getIndex()));
|
||||
|
||||
if (watch != null)
|
||||
list.add(watch);
|
||||
@ -101,7 +102,7 @@ public class PacketHandlerEquipment implements IPacketHandler {
|
||||
list = disguise.getWatcher().convert(list);
|
||||
} else {
|
||||
for (WrappedWatchableObject obj : disguise.getWatcher().getWatchableObjects()) {
|
||||
if (obj.getIndex() == 0) {
|
||||
if (obj.getIndex() == MetaIndex.LIVING_HAND.getIndex()) {
|
||||
list.add(obj);
|
||||
break;
|
||||
}
|
||||
@ -117,7 +118,7 @@ public class PacketHandlerEquipment implements IPacketHandler {
|
||||
PacketContainer packetUnblock = packetBlock.deepClone();
|
||||
// Make a packet to send the 'unblock'
|
||||
for (WrappedWatchableObject watcher : packetUnblock.getWatchableCollectionModifier().read(0)) {
|
||||
watcher.setValue((byte) ((byte) watcher.getValue() & ~(1 << 4)));
|
||||
watcher.setValue((byte) 0);
|
||||
}
|
||||
|
||||
// Send the unblock before the itemstack change so that the 2nd metadata packet works. Why?
|
||||
@ -158,16 +159,17 @@ public class PacketHandlerEquipment implements IPacketHandler {
|
||||
.write(2, ReflectionManager.getNmsItem(itemStack.getType() == Material.AIR ? null : itemStack));
|
||||
}
|
||||
|
||||
if (disguise.getWatcher().isRightClicking() && slot == EquipmentSlot.HAND) {
|
||||
if (disguise.getWatcher().isRightClicking() && (slot == EquipmentSlot.HAND || slot == EquipmentSlot.OFF_HAND)) {
|
||||
ItemStack heldItem = packets.getPackets().get(0).getItemModifier().read(0);
|
||||
|
||||
if (heldItem != null && heldItem.getType() != Material.AIR) {
|
||||
// Convert the datawatcher
|
||||
List<WrappedWatchableObject> list = new ArrayList<>();
|
||||
MetaIndex toUse = NmsVersion.v1_13.isSupported() ? MetaIndex.LIVING_HAND : MetaIndex.ENTITY_META;
|
||||
|
||||
if (DisguiseConfig.isMetaPacketsEnabled()) {
|
||||
WrappedWatchableObject watch = ReflectionManager.createWatchable(MetaIndex.ENTITY_META,
|
||||
WrappedDataWatcher.getEntityWatcher(entity).getByte(0));
|
||||
WrappedWatchableObject watch = ReflectionManager.createWatchable(toUse,
|
||||
WrappedDataWatcher.getEntityWatcher(entity).getByte(toUse.getIndex()));
|
||||
|
||||
if (watch != null)
|
||||
list.add(watch);
|
||||
@ -175,7 +177,7 @@ public class PacketHandlerEquipment implements IPacketHandler {
|
||||
list = disguise.getWatcher().convert(list);
|
||||
} else {
|
||||
for (WrappedWatchableObject obj : disguise.getWatcher().getWatchableObjects()) {
|
||||
if (obj.getIndex() == 0) {
|
||||
if (obj.getIndex() == toUse.getIndex()) {
|
||||
list.add(obj);
|
||||
break;
|
||||
}
|
||||
@ -191,8 +193,12 @@ public class PacketHandlerEquipment implements IPacketHandler {
|
||||
PacketContainer packetUnblock = packetBlock.deepClone();
|
||||
// Make a packet to send the 'unblock'
|
||||
for (WrappedWatchableObject watcher : packetUnblock.getWatchableCollectionModifier().read(0)) {
|
||||
if (NmsVersion.v1_13.isSupported()) {
|
||||
watcher.setValue((byte) 0);
|
||||
} else {
|
||||
watcher.setValue((byte) ((byte) watcher.getValue() & ~(1 << 4)));
|
||||
}
|
||||
}
|
||||
|
||||
// Send the unblock before the itemstack change so that the 2nd metadata packet works. Why?
|
||||
// Scheduler
|
||||
|
@ -235,9 +235,10 @@ public class DisguiseParser {
|
||||
|
||||
if (!Objects.deepEquals(dObj, object)) {
|
||||
throw new IllegalStateException(String.format(
|
||||
"%s has conflicting values! This means it expected the same value again but received a " +
|
||||
"%s has conflicting values in class %s! This means it expected the same value again but " +
|
||||
"received a " +
|
||||
"different value on a different disguise! %s is not the same as %s!",
|
||||
setMethod.getName(), object, dObj));
|
||||
setMethod.getName(), setMethod.getDeclaringClass().getName(), object, dObj));
|
||||
}
|
||||
|
||||
return;
|
||||
|
Loading…
Reference in New Issue
Block a user