Change falling block to store the combined block id to fix older versions with blockdata
This commit is contained in:
		@@ -4,6 +4,7 @@ import com.comphenix.protocol.PacketType;
 | 
			
		||||
import com.comphenix.protocol.ProtocolLibrary;
 | 
			
		||||
import com.comphenix.protocol.events.PacketContainer;
 | 
			
		||||
import com.comphenix.protocol.reflect.StructureModifier;
 | 
			
		||||
import lombok.Getter;
 | 
			
		||||
import me.libraryaddict.disguise.DisguiseAPI;
 | 
			
		||||
import me.libraryaddict.disguise.disguisetypes.Disguise;
 | 
			
		||||
import me.libraryaddict.disguise.disguisetypes.FlagWatcher;
 | 
			
		||||
@@ -21,8 +22,7 @@ import org.bukkit.inventory.ItemStack;
 | 
			
		||||
import java.lang.reflect.InvocationTargetException;
 | 
			
		||||
 | 
			
		||||
public class FallingBlockWatcher extends FlagWatcher {
 | 
			
		||||
    private ItemStack block = new ItemStack(Material.STONE);
 | 
			
		||||
    private BlockData blockData;
 | 
			
		||||
    private int blockCombinedId = 1;
 | 
			
		||||
    private boolean gridLocked;
 | 
			
		||||
 | 
			
		||||
    public FallingBlockWatcher(Disguise disguise) {
 | 
			
		||||
@@ -60,8 +60,7 @@ public class FallingBlockWatcher extends FlagWatcher {
 | 
			
		||||
 | 
			
		||||
            relMove.getModifier().write(0, getDisguise().getEntity().getEntityId());
 | 
			
		||||
            shorts.write(0, conRel(loc.getX(), loc.getBlockX() + 0.5));
 | 
			
		||||
            shorts.write(1, conRel(loc.getY(),
 | 
			
		||||
                    loc.getBlockY() + (loc.getY() % 1 >= 0.85 ? 1 : loc.getY() % 1 >= 0.35 ? .5 : 0)));
 | 
			
		||||
            shorts.write(1, conRel(loc.getY(), loc.getBlockY() + (loc.getY() % 1 >= 0.85 ? 1 : loc.getY() % 1 >= 0.35 ? .5 : 0)));
 | 
			
		||||
            shorts.write(2, conRel(loc.getZ(), loc.getBlockZ() + 0.5));
 | 
			
		||||
 | 
			
		||||
            try {
 | 
			
		||||
@@ -86,7 +85,7 @@ public class FallingBlockWatcher extends FlagWatcher {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public ItemStack getBlock() {
 | 
			
		||||
        return block;
 | 
			
		||||
        return ReflectionManager.getItemStackByCombinedId(getBlockCombinedId());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setBlock(ItemStack block) {
 | 
			
		||||
@@ -94,12 +93,11 @@ public class FallingBlockWatcher extends FlagWatcher {
 | 
			
		||||
            block = new ItemStack(Material.STONE);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        this.block = block;
 | 
			
		||||
        this.blockCombinedId = ReflectionManager.getCombinedIdByItemStack(block);
 | 
			
		||||
 | 
			
		||||
        if (!getDisguise().isCustomDisguiseName()) {
 | 
			
		||||
            getDisguise().setDisguiseName(TranslateType.DISGUISE_OPTIONS_PARAMETERS.get("Block") + " " +
 | 
			
		||||
                    TranslateType.DISGUISE_OPTIONS_PARAMETERS
 | 
			
		||||
                            .get(ReflectionManager.toReadable(block.getType().name(), " ")));
 | 
			
		||||
                    TranslateType.DISGUISE_OPTIONS_PARAMETERS.get(ReflectionManager.toReadable(block.getType().name(), " ")));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (DisguiseAPI.isDisguiseInUse(getDisguise()) && getDisguise().getWatcher() == this) {
 | 
			
		||||
@@ -109,11 +107,7 @@ public class FallingBlockWatcher extends FlagWatcher {
 | 
			
		||||
 | 
			
		||||
    @NmsAddedIn(NmsVersion.v1_13)
 | 
			
		||||
    public BlockData getBlockData() {
 | 
			
		||||
        if (block != null && blockData == null) {
 | 
			
		||||
            return block.getType().createBlockData();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return blockData;
 | 
			
		||||
        return ReflectionManager.getBlockDataByCombinedId(getBlockCombinedId());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @NmsAddedIn(NmsVersion.v1_13)
 | 
			
		||||
@@ -123,17 +117,23 @@ public class FallingBlockWatcher extends FlagWatcher {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        this.block = new ItemStack(data.getMaterial());
 | 
			
		||||
        this.blockData = data;
 | 
			
		||||
        this.blockCombinedId = ReflectionManager.getCombinedIdByBlockData(data);
 | 
			
		||||
 | 
			
		||||
        if (!getDisguise().isCustomDisguiseName()) {
 | 
			
		||||
            getDisguise().setDisguiseName(TranslateType.DISGUISE_OPTIONS_PARAMETERS.get("Block") + " " +
 | 
			
		||||
                    TranslateType.DISGUISE_OPTIONS_PARAMETERS
 | 
			
		||||
                            .get(ReflectionManager.toReadable(block.getType().name(), " ")));
 | 
			
		||||
                    TranslateType.DISGUISE_OPTIONS_PARAMETERS.get(ReflectionManager.toReadable(data.getMaterial().name(), " ")));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (DisguiseAPI.isDisguiseInUse(getDisguise()) && getDisguise().getWatcher() == this) {
 | 
			
		||||
            DisguiseUtilities.refreshTrackers(getDisguise());
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getBlockCombinedId() {
 | 
			
		||||
        if (blockCombinedId < 1) {
 | 
			
		||||
            blockCombinedId = 1;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return blockCombinedId;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -292,14 +292,7 @@ public class PacketHandlerSpawn implements IPacketHandler {
 | 
			
		||||
            double z = loc.getZ();
 | 
			
		||||
 | 
			
		||||
            if (disguise.getType() == DisguiseType.FALLING_BLOCK) {
 | 
			
		||||
                if (NmsVersion.v1_13.isSupported()) {
 | 
			
		||||
                    BlockData block = ((FallingBlockWatcher) disguise.getWatcher()).getBlockData();
 | 
			
		||||
 | 
			
		||||
                    data = ReflectionManager.getCombinedIdByBlockData(block);
 | 
			
		||||
                } else {
 | 
			
		||||
                    ItemStack block = ((FallingBlockWatcher) disguise.getWatcher()).getBlock();
 | 
			
		||||
                    data = ReflectionManager.getCombinedIdByItemStack(block);
 | 
			
		||||
                }
 | 
			
		||||
                data = ((FallingBlockWatcher) disguise.getWatcher()).getBlockCombinedId();
 | 
			
		||||
 | 
			
		||||
                if (((FallingBlockWatcher) disguise.getWatcher()).isGridLocked()) {
 | 
			
		||||
                    double yMod = disguise.getWatcher().getYModifier();
 | 
			
		||||
 
 | 
			
		||||
@@ -26,6 +26,7 @@ import org.bukkit.entity.*;
 | 
			
		||||
import org.bukkit.inventory.EquipmentSlot;
 | 
			
		||||
import org.bukkit.inventory.ItemStack;
 | 
			
		||||
import org.bukkit.inventory.meta.ItemMeta;
 | 
			
		||||
import org.bukkit.material.MaterialData;
 | 
			
		||||
import org.bukkit.plugin.SimplePluginManager;
 | 
			
		||||
import org.bukkit.potion.PotionEffect;
 | 
			
		||||
import org.bukkit.scheduler.BukkitRunnable;
 | 
			
		||||
@@ -94,6 +95,7 @@ public class ReflectionManager {
 | 
			
		||||
    private static Method craftBlockDataGetState;
 | 
			
		||||
    private static Method getOldItemAsBlock;
 | 
			
		||||
    private static Method magicGetBlock;
 | 
			
		||||
    private static Method magicGetMaterial;
 | 
			
		||||
    private static Method getNmsItem;
 | 
			
		||||
    private static Method getBlockData;
 | 
			
		||||
    private static Method getBlockDataAsId;
 | 
			
		||||
@@ -160,6 +162,7 @@ public class ReflectionManager {
 | 
			
		||||
            if (NmsVersion.v1_13.isSupported()) {
 | 
			
		||||
                craftBlockDataGetState = getCraftMethod("block.data.CraftBlockData", "getState");
 | 
			
		||||
                magicGetBlock = getCraftMethod("util.CraftMagicNumbers", "getBlock", Material.class);
 | 
			
		||||
                magicGetMaterial = getCraftMethod("util.CraftMagicNumbers", "getMaterial", getNmsClass("Block"));
 | 
			
		||||
                entityTypesAMethod = getNmsMethod("EntityTypes", "a", String.class);
 | 
			
		||||
 | 
			
		||||
                if (NmsVersion.v1_14.isSupported()) {
 | 
			
		||||
@@ -1566,12 +1569,17 @@ public class ReflectionManager {
 | 
			
		||||
        try {
 | 
			
		||||
            Method idMethod = getNmsMethod("Block", "getByCombinedId", int.class);
 | 
			
		||||
            Object iBlockData = idMethod.invoke(null, id);
 | 
			
		||||
 | 
			
		||||
            Class iBlockClass = getNmsClass("IBlockData");
 | 
			
		||||
 | 
			
		||||
            Method getBlock = getNmsMethod(iBlockClass, "getBlock");
 | 
			
		||||
            Method getBlock = getNmsMethod(NmsVersion.v1_16.isSupported() ? iBlockClass.getSuperclass() : iBlockClass, "getBlock");
 | 
			
		||||
            Object block = getBlock.invoke(iBlockData);
 | 
			
		||||
 | 
			
		||||
            Method getItem = getNmsMethod("Block", "t", iBlockClass);
 | 
			
		||||
            if (NmsVersion.v1_13.isSupported()) {
 | 
			
		||||
                return new ItemStack((Material) magicGetMaterial.invoke(null, block));
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            Method getItem = getNmsMethod("Block", "u", iBlockClass);
 | 
			
		||||
 | 
			
		||||
            return getBukkitItem(getItem.invoke(block, iBlockData));
 | 
			
		||||
        } catch (Exception ex) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user