package net.minecraft.world.entity.monster;

import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.network.syncher.EntityDataAccessor;
import net.minecraft.world.entity.Mob;

import com.bergerkiller.bukkit.common.bases.IntVector3;
import com.bergerkiller.bukkit.common.wrappers.DataWatcher;
import com.bergerkiller.bukkit.common.wrappers.DataWatcher.Key;

// Since MC 1.9
optional class Shulker extends Mob {
#if version >= 1.17
    protected static optional final (DataWatcher.Key<org.bukkit.block.BlockFace>) EntityDataAccessor<Direction> DATA_FACE_DIRECTION:DATA_ATTACH_FACE_ID;
    protected static optional final (DataWatcher.Key<Byte>) EntityDataAccessor<Byte> DATA_PEEK:DATA_PEEK_ID;
#elseif version >= 1.14
    protected static optional final (DataWatcher.Key<org.bukkit.block.BlockFace>) EntityDataAccessor<Direction> DATA_FACE_DIRECTION:b;
    //protected static optional final (DataWatcher.Key<IntVector3>) EntityDataAccessor<java.util.Optional<BlockPos>> DATA_AP:c;
    protected static optional final (DataWatcher.Key<Byte>) EntityDataAccessor<Byte> DATA_PEEK:d;
#elseif version >= 1.13
    protected static optional final (DataWatcher.Key<org.bukkit.block.BlockFace>) EntityDataAccessor<Direction> DATA_FACE_DIRECTION:a;
    //protected static optional final (DataWatcher.Key<IntVector3>) EntityDataAccessor<java.util.Optional<BlockPos>> DATA_AP:b;
    protected static optional final (DataWatcher.Key<Byte>) EntityDataAccessor<Byte> DATA_PEEK:c;
#else
    protected static optional final (DataWatcher.Key<org.bukkit.block.BlockFace>) EntityDataAccessor<Direction> DATA_FACE_DIRECTION:a;
    //protected static optional final (DataWatcher.Key<IntVector3>) EntityDataAccessor<com.google.common.base.Optional<BlockPos>> DATA_AP:b;
    protected static optional final (DataWatcher.Key<Byte>) EntityDataAccessor<Byte> DATA_PEEK:c;
#endif

#if version >= 1.17
    public static optional final (DataWatcher.Key<Byte>) EntityDataAccessor<Byte> DATA_COLOR:DATA_COLOR_ID;
#elseif version >= 1.12
    public static optional final (DataWatcher.Key<Byte>) EntityDataAccessor<Byte> DATA_COLOR:COLOR;
#elseif version >= 1.11.2
    public static optional final (DataWatcher.Key<Byte>) EntityDataAccessor<Byte> DATA_COLOR:bw;
#elseif version >= 1.11
    protected static optional final (DataWatcher.Key<Byte>) EntityDataAccessor<Byte> DATA_COLOR:bw;
#else
    // Unavailable < 1.11
    protected static optional final (DataWatcher.Key<Byte>) EntityDataAccessor<Byte> DATA_COLOR:###;
#endif

    <code>
    public static final Key<org.bukkit.block.BlockFace> DATA_FACE_DIRECTION = Key.Type.DIRECTION.createKey(T.DATA_FACE_DIRECTION, -1);
    //public static final Key<IntVector3> DATA_AP = Key.Type.BLOCK_POSITION.createKey(T.DATA_AP, -1);
    public static final Key<Byte> DATA_PEEK = Key.Type.BYTE.createKey(T.DATA_PEEK, -1);
    public static final Key<Byte> DATA_COLOR = Key.Type.BYTE.createKey(T.DATA_COLOR, -1);
    </code>
}